SQL - 使用具有多个 IS NULL、IS NOT NULL 的 CASE 语句

Posted

技术标签:

【中文标题】SQL - 使用具有多个 IS NULL、IS NOT NULL 的 CASE 语句【英文标题】:SQL - Using CASE statement with multiple IS NULL, IS NOT NULL 【发布时间】:2021-07-28 00:49:22 【问题描述】:

我在编写包含多个 IS NULL、NOT NULL 条件的 case 语句时遇到了困难。我有下面的 case 语句,但是似乎无法识别第三个条件(当 ID 不是 NULL 并且标签是 NULL 然后标题)。当 Label 为 null 时,该语句不选取标题。这个case语句有什么不同的写法吗?

CASE WHEN ID IS NULL THEN TEXT 
WHEN ID IS NOT NULL THEN LABEL
WHEN ID IS NOT NULL AND LABEL IS NULL THEN TITLE
END AS DESCRIPTION

谢谢

【问题讨论】:

考虑使用ISNULL()COALESCE 来处理常见的IS NULL 情况。 【参考方案1】:

CASE 表达式 停止第一个匹配。因此,您首先需要更严格的条件。在你的情况下:

(CASE WHEN ID IS NOT NULL AND LABEL IS NULL THEN TITLE
      WHEN ID IS NOT NULL THEN LABEL
      WHEN ID IS NULL THEN TEXT
 END) AS DESCRIPTION

或者,更简单的表述是:

(CASE WHEN ID IS NULL THEN TEXT
      WHEN LABEL IS NULL THEN TITLE
      ELSE LABEL          
 END) AS DESCRIPTION

在第一个条件之后,我们知道ID IS NOT NULL,因此无需再次检查。

【讨论】:

为什么不WHEN ID IS NOT NULL THEN COALESCE( TITLE, LABEL, TEXT ) ELSE ID END @戴。 . .也许。我不确定这些值是列还是字符串,或者有时是其中之一。 @Dai,文本栏没有被拾取。戈登,你写的陈述很有效,非常感谢。我明白我哪里出错了。

以上是关于SQL - 使用具有多个 IS NULL、IS NOT NULL 的 CASE 语句的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句中=null和is null

SQL中IS NOT NULL与!=NULL的区别

通过动态创建 linq 查询,在 c# 中为 Sql Equivalent “column is null”创建 Linq 表达式

SQL中=null查询不出结果而is null可以查询结果说明

WHERE IS NULL、IS NOT NULL 或 NO WHERE 子句取决于 SQL Server 参数值

SQL EXISTS vs. Aggregate IS NOT NULL