【发布时间】:2019-10-02 11:38:02
【问题描述】:
目前我有以下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 NULL IN (sd.GV01, sd.GV02, sd.GV03, sd.GV04, sd.GV05)
AND sd.CountryId = '4' THEN 4
END AS rating
FROM masterData sd
但是我没有得到返回值,为什么?谁能给我一个更好的解决方案?
【问题讨论】:
-
当 coalesce(sd.GV01, ... sd.GV05) 为空时
-
NULL无法与其他值进行比较。NULL = NULL不返回true,NULL IN (0,1,NULL)也不返回;他们都返回NULL。 附带说明NULL在使用NOT IN时表现“奇怪”(但已记录),实际上建议使用NOT EXISTS。注意这个查询会发生什么:SELECT 1 WHERE 1 NOT IN (0,1,NULL); -
即使它是有效的 SQL,也不是同一条语句。首先,您使用的是 AND。在第二个你使用 IN 就像使用很多 OR 一样。
-
@Zorkolot 哦,对了。谢谢..我忘记了:)
标签: sql sql-server sql-server-2008-r2 case-when