sql - 带有ELSe的嵌套CASE语句(SQL Server)

标签 sql sql-server-2008

我有一个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时捕获第一个条件。因此,第二个是ANULL

关于sql - 带有ELSe的嵌套CASE语句(SQL Server),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28740637/

相关文章:

mysql - order by position 子句如何在 mysql 中工作

mysql - 有没有办法检查数据库表是否已经包含 Yii2 中具有特定值的记录

sql-server - 如何在 Management Studio 中使数据库图直观地显示外键?

SQL Server有没有办法绕过重复的条件行

php - 添加新数据库条目时如何触发 .php 页面的刷新(重新加载)?

mysql - MySQL表中累计到差分数据

sql-server-2008 - Entity Framework 和 DateTime 的毫秒精度比较

sql - 如何比较不同数据库中的两个表

sql-server-2008 - 如何为插入/选择中的每一行增加变量

Mysql:如何选择给定某个其他列值的两个列值的组合唯一的行