Oracle 11g - 创建表列数据的并排比较

时间:2015-01-16 03:59:19

标签: sql oracle oracle11g

我有一个查询,我需要在常规表中提取数据并将两行数据放入一行     我有一些由

组成的行
StudentID  AUDIT_ACTN     Audit_Date .....  
aaa          A             01/01/2010  
aaa          A             03/04/2011      
aaa          A             02/02/2013  
aaa          D             09/10/2010  
aaa          D             05/06/2011  
aaa          D             06/07/2013  
aaa          A             11/12/2014~
bbb          A             01/01/2010  
bbb          A             03/04/2011      
bbb          A             02/02/2013  
bbb          D             09/10/2010  
bbb          D             05/06/2011  
bbb          D             06/07/2013  
bbb          A             11/12/2014~

我想要这样的输出

StudentID  AUDIT_ACTN   Audit_Date  StudentID  AUDIT_ACTN   Audit_Date  
aaa          A          01/01/2010    aaa          D         09/10/2010  
aaa          A          03/04/2011    aaa          D         05/06/2011  
aaa          A          02/02/2013    aaa          D         06/07/2013  
aaa          A         11/12/2014      NULL       NULL        NULL  
bbb          A          01/01/2010    bbb          D         09/10/2010  
bbb          A          03/04/2011    bbb          D         05/06/2011  
bbb          A          02/02/2013    bbb          D         06/07/2013  
bbb          A         11/12/2014      NULL       NULL        NULL  

A& D数据行是相关的,a =将某些内容添加到记录中,d =从记录中删除某些内容(某些内容是指示符)。这些是合乎逻辑的,因为你必须在删除它之前添加一些东西,而不能将它添加两次,而不是先删除它。

我目前的剧本可能走错了轨道,但是这里;

    select a.StudentId,a.Audit_Date,a.AUDIT_ACTN,d.StudentId,Audit_Date,d.AUDIT_ACTN,
from table a
join
(select *
   from
    (Select StudentId, Audit_Date,AUDIT_ACTN
        from table b
        Where b.AUDIT_ACTN='D' 
        order by Audit_Date
    )
    where rownum=1
    ) d on a.StudentId = d.StudentId
and a.AUDIT_ACTN='A'
and Select * from (Select Audit_Date 
Order by a.StudentId, a.Audit_Date

我知道这是错的,但我从哪里开始。如果有人可以帮助并指出我正确的方向。我们将不胜感激。

我当前的尝试为我带来了零行,当我取出rownum时它带来了一个x连接,在这种情况下返回12行。 谢谢 罗杰

1 个答案:

答案 0 :(得分:0)

我认为你需要像下面这样的聚合函数

    select 
         A.StudentId,A.Audit_Date,A.AUDIT_ACTN,
         D.StudentId,D.Audit_Date,D.AUDIT_ACTN
    from 
    (Select StudentId, Audit_Date,AUDIT_ACTN,ROW_NUMBER()
   OVER (PARTITION BY StudentId order by audit_date) rn
            from table b
            Where b.AUDIT_ACTN='D'
    ) D
    FULL OUTER JOIN
    (Select StudentId, Audit_Date,AUDIT_ACTN,ROW_NUMBER()
   OVER (PARTITION BY StudentId order by audit_date) rn
            from table b
            Where b.AUDIT_ACTN='A'
    ) A
    on A.rn = D.rn and A.StudentId = B.StudentId

我希望这会起作用