oracle - 当所有行都正常时从表中检索记录
问题描述
我有一张这样的桌子
类别 | 业务日期 | 加载日期 | 地位 |
---|---|---|---|
一个 | 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 日 |
解决方案
您可以使用:
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<>在这里摆弄
推荐阅读
- regex - 匹配以指定文本开头的单词
- pci - pcie 错误如何报告给根联合体?
- ruby-on-rails - 为什么评论以灰色块呈现,里面没有文字?
- android - 在 ListView 中重复项目?它不能正常工作,第一项显示在第三个位置,并再次从第一项重复
- php - php session.save_path 没有价值
- android - 如何使用 FirebaseRecyclerAdapter 显示来自 firebase 实时数据库的所有数据
- java - if循环内的表达式评估
- sql - 格式化数据以在 SQL Server 中生成线性回归
- scala - UDF 取两个参数的 spark 数据帧
- css - CSS Flexbox - 具有可滚动内容的浮动可变高度页脚