我有一个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'
当“首字母大写”不正确时,我想进入ELSE部分,即“A”不为NULL。任何人都可以建议我是否错误地嵌套了它们?没有得到正确的结果。
非常感谢,
最佳答案
首先,您不需要嵌套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
时捕获第一个条件。因此,第二个是A
是NULL
。
关于sql - 带有ELSe的嵌套CASE语句(SQL Server),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28740637/