我有一个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'
当First CASE不为真时,我想转到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
时。
您可以将第二个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'