联合后如何删除空白日期值

时间:2014-10-31 12:54:43

标签: oracle oracle11g

我有一个将值返回为

的查询
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

联合结果集不会返回所需的输出。空日期值仍然显示

你能帮忙吗?

谢谢!

此致 山塔努

2 个答案:

答案 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>

您只需要在联合查询中使用选择查询。