首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL case语句不执行“”

问SQL case语句不执行“”
EN

Database Administration用户
提问于 2018-08-01 12:52:16
回答 2查看 2.6K关注 0票数 1

我在Oracle 12.1.0.2.0上使用CASE语句编写了一个查询。我有两个“当”声明和一个“其他”陈述。除了“query”语句之外,该查询正在按预期工作。我没有语法错误--它只是在应该的时候没有碰到“nothing”的情况,而是什么也不返回。

代码语言:javascript
复制
SELECT 
CASE
WHEN COUNT(COLUMN_A) = 1
    THEN 'PASS'
WHEN COUNT(COLUMN_A) > 1
    THEN 'FAIL'
ELSE 'DOES NOT EXIST'
END AS TEST,
SCH.COLUMN_A
FROM SCHEMA.TABLE_A SCH
WHERE SCH.COLUMN_A = 'NA'
GROUP BY COLUMN_A

当我运行这个查询时(据我理解,这是另外一种情况),然后它会按它应该返回的方式返回0:

代码语言:javascript
复制
SELECT COUNT(COLUMN_A) < 1
FROM SCHEMA.TABLE_A SCH
WHERE SCH.COLUMN_A = 'NA'

如果您需要提供表结构,请告诉我,但这是相当简单的。

我做错了什么?当查询返回0时,其他语句为什么不返回“不存在”?我有一种感觉,这是一些简单的事情,但我被困住了,可以得到一些帮助。我很感激。

EN

回答 2

Database Administration用户

发布于 2018-08-01 14:01:14

您使用了以下谓词:COLUMN_A = 'NA'

只有当有0行时,COUNT(COLUMN_A)的结果才能为0(由于谓词的缘故,COLUMN_A = 'NA'作为空项被排除在外)。如果有0行,则根本不计算CASE语句,而且上面的查询不返回任何结果。

即使没有与谓词匹配的行,也需要返回结果的查询。例如:

代码语言:javascript
复制
SELECT 
  CASE
    WHEN C = 1
      THEN 'PASS'
    WHEN C > 1
      THEN 'FAIL'
    ELSE 'DOES NOT EXIST',
    'NA'
FROM
(
  SELECT COUNT(*) AS C
  FROM SCHEMA.TABLE_A SCH
  WHERE SCH.COLUMN_A = 'NA'
);
票数 2
EN

Database Administration用户

发布于 2018-08-01 13:59:23

如果没有COLUMN_A = 'NA‘的记录,那么输出中就没有记录。

使用类似的东西

代码语言:javascript
复制
SELECT 
CASE
WHEN COUNT(SCH.COLUMN_A) = 1
    THEN 'PASS'
WHEN COUNT(SCH.COLUMN_A) > 1
    THEN 'FAIL'
ELSE 'DOES NOT EXIST'
END AS TEST,
SCH.COLUMN_A
FROM (SELECT 'NA' COLUMN_A) dummy
LEFT JOIN SCHEMA.TABLE_A SCH ON SCH.COLUMN_A = dummy.COLUMN_A
/* GROUP BY SCH.COLUMN_A */
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/213772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档