首页 > 解决方案 > 当所有行都正常时从表中检索记录

问题描述

我有一张这样的桌子

类别 业务日期 加载日期 地位
一个 20 年 11 月 1 日 20 年 12 月 1 日 好的
20 年 11 月 1 日 20 年 12 月 1 日 好的
C 20 年 11 月 1 日 20 年 12 月 1 日 进行中

当只有所有状态值时,我需要检索行good,如果不inprogress应该检索任何行

预期输出:

1行如下

地位 业务日期 加载日期
好的 20 年 11 月 1 日 20 年 12 月 1 日

标签: oracle

解决方案


您可以使用:

SELECT Category,
       business_date,
       load_date,
       status
FROM   (
  SELECT t.*,
         COUNT(CASE WHEN status != 'Good' THEN 1 END) OVER () AS num_not_good
  FROM   table_name t
)
WHERE  num_not_good = 0;

其中,对于您的示例数据:

CREATE TABLE table_name (Category, business_date, load_date, status) AS
SELECT 'A', DATE '2020-01-11', DATE '2020-01-12', 'Good' FROM DUAL UNION ALL
SELECT 'B', DATE '2020-01-11', DATE '2020-01-12', 'Good' FROM DUAL UNION ALL
SELECT 'C', DATE '2020-01-11', DATE '2020-01-12', 'Inprogress' FROM DUAL

正如预期的那样,输出没有行,因为有Inprogress一行。

如果您随后使用:

UPDATE table_name SET status = 'Good';

然后再次运行查询,输出为:

类别 BUSINESS_DATE 加载日期 地位
一个 20 年 1 月 11 日 20 年 1 月 12 日 好的
20 年 1 月 11 日 20 年 1 月 12 日 好的
C 20 年 1 月 11 日 20 年 1 月 12 日 好的

db<>在这里摆弄


推荐阅读