在SQL Server中检查多个值为NULL的列

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

目前我有以下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

但是我没有得到返回值,为什么?有人能给我一个更好的解决办法吗?

你的方法很好。几乎任何对
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;