在SQL Server中检查多个值为NULL的列
目前我有以下sql语句:在SQL Server中检查多个值为NULL的列,sql,sql-server,sql-server-2008-r2,case-when,Sql,Sql Server,Sql Server 2008 R2,Case When,目前我有以下sql语句: SELECT CASE WHEN sd.GV01 IS NULL AND sd.GV02 IS NULL AND sd.GV03 IS NULL AND sd.GV04 IS NULL AND sd.GV05 IS NULL AND sd.CountryId = '4' THEN 4 END AS rating FROM masterData sd 我试
SELECT CASE
WHEN sd.GV01 IS NULL
AND sd.GV02 IS NULL
AND sd.GV03 IS NULL
AND sd.GV04 IS NULL
AND sd.GV05 IS NULL
AND sd.CountryId = '4' THEN 4
END AS rating
FROM masterData sd
我试着用同样的方法,用一个更简短的定义:
SELECT CASE
WHEN NULL IN (sd.GV01, sd.GV02, sd.GV03, sd.GV04, sd.GV05)
AND sd.CountryId = '4' THEN 4
END AS rating
FROM masterData sd
但是我没有得到返回值,为什么?有人能给我一个更好的解决办法吗?你的方法很好。几乎任何对
NULL
值的比较都会返回NULL
——这被视为false
您可以使用COALESCE()
:
当coalesce(sd.GV01,…sd.GV05)为null时,
null
不能与类似的其他值进行比较NULL=NULL
在(0,1,NULL)中不返回true
,也不返回NULL;它们都返回NULL
。另一方面,当使用不在
中时,NULL
行为“奇怪”(但有记录),实际上建议不存在
。注意这个查询会发生什么:选择1,其中1不在(0,1,NULL)中代码>即使它是有效的SQL,也不是同一条语句。首先,您使用和。在你正在使用的第二种情况下,就像使用了很多ORs一样。@Zorkolot哦,是的,对了。非常感谢。我忘了:)
SELECT (CASE WHEN COALESCE(sd.GV01, sd.GV02, sd.GV03, sd.GV04, sd.GV05) IS NULL AND
sd.CountryId = '4'
THEN 4
END) AS rating
FROM masterData sd;