ORACLE SQL pivot用于非聚合类查询

时间:2014-04-25 19:49:00

标签: sql oracle pivot

我有一张表格,其数据如下: - id name data 1 a 10 1 b 20 1 c 30 2 d 40 2 e 50 现在,如果我想将行转换为列(给它们一个唯一的名称)并聚合数据行(使用xmlagg)...我怎样才能获得像

这样的输出

id name_1 name_2 name_3 data 1 a b c 10,20,30 2 d e 40,50

所以基本上将行转换为列并重命名它们并聚合与它们相关的数据。

2 个答案:

答案 0 :(得分:1)

作为示例:您可以使用listAgg或WM_Concat,具体取决于Oracle的版本

SELECt ID, wm_concat(data)
FROM Table
GROUP BY ID

您也可以使用案例陈述,但不知道如何确定哪些名称列在3列中的哪一个,我还没有猜到它......

答案 1 :(得分:0)

对于此类查询,您需要生成序号,然后执行条件聚合:

select id,
       max(case when seqnum = 1 then name end) as name1,
       max(case when seqnum = 2 then name end) as name2,
       max(case when seqnum = 3 then name end) as name3,
       list_agg(data, ',') within group (order by name) as data
from (select t.*, row_number() over (partition by id order by name) as seqnum
      from table t
     ) t
group by id;