Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从“选择”中的两列中选择一列_Sql_Sql Server_Select_If Statement - Fatal编程技术网

Sql 从“选择”中的两列中选择一列

Sql 从“选择”中的两列中选择一列,sql,sql-server,select,if-statement,Sql,Sql Server,Select,If Statement,在SQL Server 2008R2中,我有两个表,CONFIG\u DATA和CNA\u LIST: CONFIG_DATA有两个字段: ID [varchar(20)] Address [int] 01 141516 02 132132 CNA\u列表有三个字段: Address [int] IP1 [varchar(20)] IP2 [varchar(20)] 141516 1.2.3.4

在SQL Server 2008R2中,我有两个表,
CONFIG\u DATA
CNA\u LIST

CONFIG_DATA
有两个字段:

ID [varchar(20)]    Address [int]
01                  141516  
02                  132132
CNA\u列表
有三个字段:

Address [int]  IP1 [varchar(20)]   IP2 [varchar(20)]
141516         1.2.3.4             (null)
132132         (null)              2.3.4.5
这些是在
IP1
IP2
字段中具有一个或两个IP地址的现场设备(可以是一个,也可以是两个)

我想从
CNA_列表
表中列出
CONFIG_数据
表和
IP1
,如果
NULL
,则列出
IP2

地址
字段链接两个表

这很好:

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
,但语法检查器会抱怨。

您可以使用或函数来执行此操作:

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当b.IP1不为空时,则b.IP1否则b.IP2结束时
case当然后。。。ELSE结束为
——在ANSI-92 SQL标准(20多年前)中,旧式逗号分隔的表格列表样式被正确的ANSI
JOIN
语法所取代,不鼓励使用它。我建议添加nullif()除非您绝对确定缺少的值将为NULL,否则请将其添加到两个字段以说明空白。isnull(nullif(b.IP1',),nullif(b.IP2))