从SELECT中的两列中选择一列

时间:2015-02-10 18:23:23

标签: sql sql-server select if-statement

在SQL Server 2008R2中,我有两个表,CONFIG_DATACNA_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地址的现场设备,位于IP1IP2字段中(可以是其中之一,也可以是两者)。

我想在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

但如果IP1null我需要IP2,此列列为"IP"

我已尝试IF(b.IP1 <> '')b.IP1 ELSE b.IP2,但语法检查程序会抱怨。

1 个答案:

答案 0 :(得分:9)

您可以使用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()有两个参数( check,replacement ),如果第一个是NULL,则返回第二个参数。
coalesce()的工作方式几乎相同,但是如果所有参数都是NULL,则可以使用两个以上的参数并返回第一个非NULL参数或NULL。 / p>

还有第三种不依赖于内置函数的方法,即使用case这样的表达式:case when b.IP1 is not null then b.IP1 else b.IP2 end