带有ELSE的嵌套CASE语句(SQL Server)

10

我有一个类似以下的CASE语句:

CASE 
       WHEN A IS NULL 
       THEN CASE
                 WHEN B IN ('C','D') THEN NULL
                 WHEN X NOT IN ('C','D') THEN Z
                 End
                 ELSE SOMETHING_ELSE -- Want to get here When 'A' IS NOT NULL
                 END AS 'Result'

当第一个CASE不成立时,即'A'不为空时,我希望进入ELSE部分。有人能建议一下我是不是嵌套错误了?我的结果不正确。

非常感谢。

2个回答

15

首先,您不需要嵌套case语句。只需使用一个case

select (CASE WHEN A IS NULL AND B IN ('C', 'D') THEN NULL
             WHEN A IS NULL AND X NOT IN ('C','D') THEN Z
             WHEN A IS NOT NULL THEN SOMETHING_ELSE
        END) as Result

请注意,当A IS NULL,但前两个条件不满足时,返回值将为NULL

因为case语句是按顺序评估的,所以可以更简单地编写如下:

select (CASE WHEN A IS NOT NULL THEN SOMETHING_ELSE
             WHEN B IN ('C', 'D') THEN NULL
             WHEN X NOT IN ('C', 'D') THEN Z
        END) as Result
第一个条件是当A不是NULL时成立。因此,第二个和第三个条件是当ANULL时成立。

8
您可以在您的代码中添加第二个“when”语句,用于检查第二个条件并设置变量值,否则将其设置为默认值。
CASE 
    WHEN A IS NULL THEN CASE
                          WHEN B IN ('C','D') THEN NULL
                          WHEN X NOT IN ('C','D') THEN Z
                        End
    WHEN A IS NOT NULL THEN yourdesiredvalue
    ELSE default value
    END AS 'Result'

如果第一个CASE为真,它会给我结果吗? - InTheWorldOfCodingApplications
怎么可能 A 同时既是 NULL 又是 NOT NULL - Mahesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接