Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与ELSe(SQL Server)嵌套的CASE语句_Sql_Sql Server 2008 - Fatal编程技术网

与ELSe(SQL Server)嵌套的CASE语句

与ELSe(SQL Server)嵌套的CASE语句,sql,sql-server-2008,Sql,Sql Server 2008,我有一个案例陈述如下 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

我有一个案例陈述如下

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'
当第一种情况不成立时,我想进入另一部分,即“A”不为空。有人能建议我是否把它们嵌套错了吗?没有得到正确的结果


非常感谢,

您可以在案例中添加第二个,您可以检查第二个条件并设置值,否则设置默认值

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为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
时捕获第一个条件。因此,第二个两个是当
A
NULL

时,即使第一种情况是真的,
A
是否会同时为
NULL
非NULL
。??