【问题标题】:Check multiple columns with value NULL in SQL Server在 SQL Server 中检查多个值为 NULL 的列
【发布时间】: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 不返回 trueNULL 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


【解决方案1】:

你的方法很好。几乎所有NULL 值的比较都会返回NULL——这被视为错误。

你可以使用COALESCE():

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;

【讨论】:

    猜你喜欢
    • 2013-11-05
    • 2013-08-10
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2018-09-04
    • 1970-01-01
    相关资源
    最近更新 更多