没有值时带有 CASE 的 SQL 语句

Posted

技术标签:

【中文标题】没有值时带有 CASE 的 SQL 语句【英文标题】:SQL Statement with CASE when there are no values 【发布时间】:2014-10-20 13:47:39 【问题描述】:

我正在尝试将CASE 语句用于以下内容,但是它没有得到预期的结果。

我想要的是,如果没有基于 where 条件的值,那么我想返回 'N' 作为结果。

SELECT CASE WHEN val IS NULL THEN  'N' else val END
from (select  nvl(is_expired,'x')val
  FROM test
 WHERE product_no = '12DF')

当表中不存在product_no 12DF时,我想返回一个值而不是空或null。

指定表结构here

【问题讨论】:

【参考方案1】:

如果没有产品“12DF”,那么您将不会从子选择中获得任何行。

我不太确定您要解决哪个问题。 如果您将其嵌入到程序中,因为您可以获得包含多行的结果集,那么该代码也应该能够处理空集。 如果您希望结果集中有 0 行或 1 行,您可以使用像 max 这样的聚合函数。

select nvl(max(is_expired), 'N')
  from test
 where product_no = '12DF';

【讨论】:

以上是关于没有值时带有 CASE 的 SQL 语句的主要内容,如果未能解决你的问题,请参考以下文章

带有“case”的sql语句的奇怪行为

C# 将带有 Case 语句的 SQL 查询转换为 LINQ

带有条件 CASE 语句的 SQL LEFT JOIN

PYSPARK:如何将带有多个 case 语句的 SQL 查询转换为 Pyspark/Pyspark-SQL?

带有 CASE 条件和 SUM() 的 SELECT 查询

LIKE 在 CASE 语句中 Oracle SQL (Sql Developer)