[英]Nested CASE Statement With ELSe (SQL Server)
I have a CASE statement something like following 我有一个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'
I want to get to ELSE part when First CASE is not true ie 'A' is not NULL. 当First CASE不为真时我想进入ELSE部分,即'A'不是NULL。 Can anyone suggest if i have wrongly nested them?
任何人都可以建议我是否错误地嵌套了它们? not getting results right.
没有得到正确的结果。
Many Thanks, 非常感谢,
First, you don't need to nest case
statements. 首先,您不需要嵌套
case
语句。 Just use one 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
Note that when A IS NULL
but the first two conditions are not met, then the return value will be NULL
. 请注意,当
A IS NULL
,但前两个条件都不满足,则返回值将是NULL
。
Because case
statements are evaluated sequentially, this is simpler to write as: 因为
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
The first condition captures when A
is not NULL
. 当
A
不为NULL
时,第一个条件捕获。 Hence the second two are when A
is NULL
. 因此,后两个是
A
为NULL
。
You can add the second When to your case where you can check for the second condition and set value otherwise set default value. 您可以添加第二个何时到您的情况,您可以检查第二个条件并设置值,否则设置默认值。
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'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.