相关文章推荐
重情义的小马驹  ·  How to fix fatal ...·  1 年前    · 
酒量小的煎饼  ·  Python ...·  1 年前    · 

使用ELSe的嵌套CASE语句 (SQL Server)

8 人关注

我有一个CASE语句,内容如下

WHEN A IS NULL THEN CASE WHEN B IN ( 'C' , 'D' ) THEN NULL WHEN X NOT IN ( 'C' , 'D' ) THEN Z ELSE SOMETHING_ELSE -- Want to get here When 'A' IS NOT NULL END AS 'Result'

我想在第一个CASE不为真时进入ELSE部分,即'A'不为NULL。谁能建议我是否错误地嵌套了它们?

非常感谢。

sql
sql-server-2008
2 个回答
Gordon Linoff
Gordon Linoff
发布于 2015-02-26
已采纳
0 人赞同

首先,你不需要嵌套 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 。因此,后两个条件是当ANULL

Mahesh
Mahesh
发布于 2015-02-26
0 人赞同

你可以在你的案例中添加第二个When,你可以检查第二个条件并设置值,否则设置默认值。

WHEN A IS NULL THEN CASE WHEN B IN ( 'C' , 'D' ) THEN NULL WHEN X NOT IN ( 'C' , 'D' ) THEN Z