ELSe(SQL Server)的嵌套CASE语句

InT*_*ons 6 sql sql-server-2008

我有一个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'
Run Code Online (Sandbox Code Playgroud)

当First CASE不为真时我想进入ELSE部分,即'A'不是NULL.任何人都可以建议我是否错误地嵌套了它们?没有得到正确的结果.

非常感谢,

Gor*_*off 11

首先,您不需要嵌套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
Run Code Online (Sandbox Code Playgroud)

请注意,当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
Run Code Online (Sandbox Code Playgroud)

第一个条件捕获何时A不是NULL.因此,第二两个是当ANULL.


Mah*_*esh 7

您可以添加第二个何时到您的情况,您可以检查第二个条件并设置值,否则设置默认值.

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'
Run Code Online (Sandbox Code Playgroud)