带有 ELSe 的嵌套 CASE 语句(SQL 服务器)
Nested CASE Statement With ELSe (SQL Server)
我有一个类似下面的 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'
我想在第一个 CASE 不正确时进入 ELSE 部分,即 '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'
首先,您不需要嵌套 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
但是前两个条件不满足时,那么return的值会是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
.
我有一个类似下面的 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'
我想在第一个 CASE 不正确时进入 ELSE 部分,即 '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'
首先,您不需要嵌套 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
但是前两个条件不满足时,那么return的值会是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
.