我有一个将值返回为
的查询Col1 Col2 Date 1 Date 2 Date 3
A B 1-Jan
A B 3-Feb
A B 5-Dec
我想将单个记录显示为
Col 1 Col2 Date1 Date2 Date3
A B 1-Jan 1-Aug 5-July
我尝试使用3个union语句1st,其中col1,col2,date1和(cast null作为日期)作为Date2,并且(将null作为日期)作为日期3和2使用(cast null作为日期)作为date1和Date2 (作为日期转换为null)作为日期3,第3个(将null作为日期)作为date1并且(将null作为日期)作为Date2和日期3
联合结果集不会返回所需的输出。空日期值仍然显示
你能帮忙吗?
谢谢!
此致 山塔努
答案 0 :(得分:0)
我想我们可以尝试这样做
select col1,col2,max(date1),max(date2),max(date3)
from table
group by col1,col2;
答案 1 :(得分:0)
首先,你的联合查询本身是错误的。查看示例数据中的值,您只需使用MAX
获取date
并删除NULL
值。
但是,如果列中有多个日期值,则会选择这些日期的最大值。
- 您的联合查询,我使用WITH
原因
SQL> WITH DATA AS(
2 SELECT 'A' col1, 'B' col2, to_date('01-Jan','DD-Mon') date1, NULL date2, NULL date3 FROM dual UNION ALL
3 SELECT 'A' col1, 'B' col2, NULL date1, to_date('1-Aug','DD-Mon') date2, NULL date3 FROM dual UNION ALL
4 SELECT 'A' col1, 'B' col2, NULL date1, NULL date2, to_date('1-Aug','DD-Mon') date3 FROM dual)
5 SELECT col1, col2, max(date1) date1, max(date2) date2, max(date3) date3 FROM DATA
6 GROUP BY col1, col2
7 /
C C DATE1 DATE2 DATE3
- - --------- --------- ---------
A B 01-JAN-14 01-AUG-14 01-AUG-14
SQL>
您只需要在联合查询中使用选择查询。