Oracle - Full加入一个反对自己的表?

时间:2014-04-15 13:44:46

标签: sql database oracle

表格如下所示

 PK1             PKDate1       Field1
  A            4/14/2014      ABC
  A            4/15/2014      ABC
  B            4/14/2014      ABC
  B            4/15/2014      DEF
  C            4/15/2014      ABC
  D            4/14/2014      ABC

如何编写一个包含两个日期的查询,并将每个值的Field1与日期进行比较。踢球者是,如果某一行在一个日期是存在的,而不是另一个,则将其显示为空。 IE中的resultSet应该如下(如果在4/14 + 4/15中传递)

 PK1          Field1ForDay1     Field1ForDay2
  A                ABC             ABC
  B                ABC             DEF
  C               null             ABC
  D                ABC             null         

对我来说,困难的部分是获得' nulls'一个方面"对于另一个存在的日期 - 其中PK1 =' C'并不存在4/14日期显示空,反之亦然(其中PK1 =' D',没有记录,4/15日期显示为空)。 应该能够帮助我的任何可能的帮助或进展

1 个答案:

答案 0 :(得分:1)

您可以使用group by和条件聚合:

执行此操作
select pk1,
       max(case when PKDate1 = to_date('2014-04-14', 'YYYY-MM-DD') then field1 end) as Field1ForDay1,
       max(case when PKDate1 = to_date('2014-04-15', 'YYYY-MM-DD')then field1 end) as Field1ForDay2
from table t
group by pk1;