带有 ELSe 的嵌套 CASE 语句(SQL 服务器)

Nested CASE Statement With ELSe (SQL Server)

我有一个类似下面的 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 不正确时进入 ELSE 部分,即 'A' 不为 NULL。谁能建议我是否错误地嵌套了它们?没有得到正确的结果。

非常感谢,

您可以将第二个 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 语句。只用一种情况:

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但是前两个条件满足时,那么return的值会是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.