use*_*770 2 sql sql-server select if-statement
在SQL Server 2008R2中,我有两个表,CONFIG_DATA
并且CNA_LIST
:
CONFIG_DATA
有两个领域:
ID [varchar(20)] Address [int]
01 141516
02 132132
Run Code Online (Sandbox Code Playgroud)
CNA_LIST
有三个领域:
Address [int] IP1 [varchar(20)] IP2 [varchar(20)]
141516 1.2.3.4 (null)
132132 (null) 2.3.4.5
Run Code Online (Sandbox Code Playgroud)
这些是在IP1
或IP2
字段中具有一个或两个IP地址的现场设备(可以是其中之一,也可以是两者).
我想列出了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
Run Code Online (Sandbox Code Playgroud)
但如果IP1
是null
我需要的IP2
,以列为此列"IP"
:
我试过IF(b.IP1 <> '')b.IP1 ELSE b.IP2
但语法检查器抱怨.
jpw*_*jpw 10
您可以使用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
Run Code Online (Sandbox Code Playgroud)
我还重写了您的查询以使用显式连接而不是旧的隐式连接语法.
isnull()
接受两个参数(检查,替换)并返回第二个参数(如果是第一个)NULL
.
coalesce()
工作方式几乎相同但可以使用两个以上的参数并返回第一个非NULL
参数或者NULL
如果所有参数都是NULL
.
还有第三种方法不依赖于内置函数,这就是使用像这样的case表达式:case when b.IP1 is not null then b.IP1 else b.IP2 end
归档时间: |
|
查看次数: |
2583 次 |
最近记录: |