好难啊!!脑袋都想破了!
例如数据结构:
SN    Data      Item
A         1         XX1
A         2         XX2
A         3         XX3
A         4         XX4
B         5         XX1
B         6         XX2
B         7         XX3
B         8         XX4期望的结果:
SN    Data1     Item1      Data2     Item2    Data3     Item3   Data4      Item4
A         1            XX1          2           XX2       3           XX3        4           XX4
B         5            XX1          6           XX2       7           XX3        8           XX4

解决方案 »

  1.   

    拼SQL语句。
    先计算出每个SN的最大行数,然后再行转列,生成所需的结果。
      

  2.   

    WITH t(SN,Data,Item,rn) AS (
        SELECT *,
               ROW_NUMBER() OVER(PARTITION BY sn ORDER BY data)
          FROM table1
    )
        SELECT sn, 
               MAX(DECODE(rn, 1, data,null)) as data1, 
               MAX(DECODE(rn, 1, item,null)) as item1, 
               MAX(DECODE(rn, 2, data,null)) as data2, 
               MAX(DECODE(rn, 2, item,null)) as item2, 
               MAX(DECODE(rn, 3, data,null)) as data3, 
               MAX(DECODE(rn, 3, item,null)) as item3, 
               MAX(DECODE(rn, 4, data,null)) as data4, 
               MAX(DECODE(rn, 4, item,null)) as item4 
          FROM t
      GROUP BY sn
      ORDER BY sn
      

  3.   

    用行转列函数10g.  vmsys.vm_concat. 11g listagg
      

  4.   

    for  11g  用:
    select * from Test_table 
      pivot ( min(data) as d,min(item) as m
         for (item) in ('XX1' as item_1,'XX2' as item_2,'XX3' as item_3,'XX4' as item_4)) 
      order by sn;