如有表:
COL1  COL2
 A     N1
 B     N1
 C     N2
 D     N2
 E     N3想通过一SQL文取出以下结果
 N1  N2  N3  ← 列名
 A   C   E
 B   D   (null)怎么写,求高手指点..

解决方案 »

  1.   

    旋转90度这种做法在某些特定的场合还是很有用的。用一条SQL实现起来还是蛮有难度的,楼主何不用多条SQL语句呢?或者写一个stored procedure也可以。
      

  2.   

    多条SQL文也可以,不过我还是没有想出来怎么写,呵呵.
    用stored procedure我觉的没有那么复杂,也没必要用,总觉的用stored procedure有点大材小用,哈.
      

  3.   

    应该是用这两个函数,不过可能还得加上GROUP BY,不过具体的写法怎么写?请教
      

  4.   

    with b as (select a.id,a.name ,rank() over (partition by a.name order by a.id) rn from a)
    select min(case when rnn=1 then c.id else null end) N1,
     min(case when rnn=2 then c.id else null end) N2,
     min(case when rnn=3 then c.id else null end) N3
     from (select b.id ,b.rn,row_number() over (partition by b.rn order by b.id) rnn from b)c group by c.rn order by c.rn试试这个
      

  5.   

    SELECT MAX(DECODE(COL2,'N1',COL1,NULL)) N1,
           MAX(DECODE(COL2,'N2',COL1,NULL)) N2,
           MAX(DECODE(COL2,'N3',COL1,NULL)) N3
    FROM 
    (SELECT A.*,ROW_NUMBER() OVER(PARTITION BY COL2 ORDER BY COL2) RN
    FROM TABS A)
    GROUP BY RN