从 SELECT 中的两列中选择
selecting from either of two columns in SELECT
在 SQL Server 2008R2 我有两个 tables,CONFIG_DATA
和 CNA_LIST
:
CONFIG_DATA
有两个字段:
ID [varchar(20)] Address [int]
01 141516
02 132132
CNA_LIST
有三个字段:
Address [int] IP1 [varchar(20)] IP2 [varchar(20)]
141516 1.2.3.4 (null)
132132 (null) 2.3.4.5
这些是在 IP1
或 IP2
字段中具有一个或两个 IP 地址的现场设备(可以是其中之一,也可以是两者)。
我想列出 CONFIG_DATA
table 和 CNA_LIST
table 中的 IP1
,如果是 NULL
,则IP2
.
Address
字段链接两个 table。
这会很好用:
select a.ID, a.Address, b.IP1
from CONFIG_DATA a, CNA_LIST b where a.Address = b.Address
但如果 IP1
是 null
我需要 IP2
,此列列为 "IP"
:
我试过 IF(b.IP1 <> '')b.IP1 ELSE b.IP2
但语法检查器有问题。
您可以使用 isnull() or coalesce() 函数来执行此操作:
select a.ID, a.Address, isnull(b.IP1, b.IP2) as "IP"
from CONFIG_DATA a
inner join CNA_LIST b on a.Address = b.Address
我还重写了您的查询以使用显式连接而不是旧的隐式连接语法。
isnull()
有两个参数(检查,替换)和 returns 如果第一个是 NULL
第二个。
coalesce()
的工作方式几乎相同,但可以采用两个以上的参数和 returns 第一个非 NULL
参数或 NULL
如果所有参数都是 NULL
.
还有第三种不依赖内置函数的方法,就是使用 case 表达式,如下所示: case when b.IP1 is not null then b.IP1 else b.IP2 end
在 SQL Server 2008R2 我有两个 tables,CONFIG_DATA
和 CNA_LIST
:
CONFIG_DATA
有两个字段:
ID [varchar(20)] Address [int]
01 141516
02 132132
CNA_LIST
有三个字段:
Address [int] IP1 [varchar(20)] IP2 [varchar(20)]
141516 1.2.3.4 (null)
132132 (null) 2.3.4.5
这些是在 IP1
或 IP2
字段中具有一个或两个 IP 地址的现场设备(可以是其中之一,也可以是两者)。
我想列出 CONFIG_DATA
table 和 CNA_LIST
table 中的 IP1
,如果是 NULL
,则IP2
.
Address
字段链接两个 table。
这会很好用:
select a.ID, a.Address, b.IP1
from CONFIG_DATA a, CNA_LIST b where a.Address = b.Address
但如果 IP1
是 null
我需要 IP2
,此列列为 "IP"
:
我试过 IF(b.IP1 <> '')b.IP1 ELSE b.IP2
但语法检查器有问题。
您可以使用 isnull() or coalesce() 函数来执行此操作:
select a.ID, a.Address, isnull(b.IP1, b.IP2) as "IP"
from CONFIG_DATA a
inner join CNA_LIST b on a.Address = b.Address
我还重写了您的查询以使用显式连接而不是旧的隐式连接语法。
isnull()
有两个参数(检查,替换)和 returns 如果第一个是 NULL
第二个。
coalesce()
的工作方式几乎相同,但可以采用两个以上的参数和 returns 第一个非 NULL
参数或 NULL
如果所有参数都是 NULL
.
还有第三种不依赖内置函数的方法,就是使用 case 表达式,如下所示: case when b.IP1 is not null then b.IP1 else b.IP2 end