输入
A B date
--------------------
00 12 22-01-2019
00 12 null
00 25 22-01-2019
00 24 22-01-2019
从以上数据中,我需要以下输出:
A B date
--------------------
00 12 null
00 25 22-01-2019
00 24 22-01-2019
我需要从表中获取打开,关闭的记录。
如果我使用的日期为空,那么现有的其他记录将不会出现。
我需要在B列中应用条件。
如果列B的日期中有空值,则将显示空值 否则,如果同时存在null和not null值null,则将输出date null。
Select a,b,date
from table1,table2
where ...
group by a,b,date
答案 0 :(得分:3)
集合函数忽略空值,因此您需要anaytic version:
select a, b, min(date_) keep (dense_rank first order by date_ nulls first)
from input group by a, b
答案 1 :(得分:1)
Oracle设置:
CREATE TABLE table_name ( A, B, DT ) AS
SELECT 0, 12, DATE '2019-01-22' FROM DUAL UNION ALL
SELECT 0, 12, NULL FROM DUAL UNION ALL
SELECT 0, 25, DATE '2019-01-22' FROM DUAL UNION ALL
SELECT 0, 24, DATE '2019-01-22' FROM DUAL;
查询:
SELECT A,
B,
CASE
WHEN COUNT( CASE WHEN DT IS NULL THEN 1 END ) > 0
THEN NULL
ELSE MAX( DT )
END AS DT
FROM table_name
GROUP BY A, B;
输出:
A | B | DT -: | -: | :-------- 0 | 12 | null 0 | 24 | 22-JAN-19 0 | 25 | 22-JAN-19
db <>提琴here