在 SQL Server 2008R2 中,我有两个表,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
这些是具有一个或两个 IP 地址的现场设备,位于
IP1
中。或 IP2
字段(可以是其中之一,也可以是两者)。我想列出
CONFIG_DATA
表带 IP1
来自 CNA_LIST
表,如果是 NULL
, IP2
.Address
字段链接两个表。这会正常工作:
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()或 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()
接受两个参数(检查、替换),如果第一个参数是 NULL
,则返回第二个参数.coalesce()
工作方式几乎相同,但可以采用两个以上的参数并返回第一个非 NULL
参数或 NULL
如果所有参数都是 NULL
.还有第三种不依赖于内置函数的方法,那就是使用 case像这样的表达:
case when b.IP1 is not null then b.IP1 else b.IP2 end
关于sql - 从 SELECT 中的两列之一中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28438988/