与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
。??