oracle中把多行记录合并为一行

遇到这么一个问题oracle

id a b c d e
1 1 1 1 1 1
1 2 2 2 2 2
1 3 3 3 3 3
2 4 4 4 4 4
2 5 5 5 5 5
3 6 6 6 6 6
4 7 7 7 7 7
5 8 8 8 8 8
5 9 9 9 9 9


这是表结构,我想查询出这样的结果函数

id a b c d e
1 1,2,3 1,2,3 1,2,3 1,2,3 1,2,3
2 4,5 4,5 4,5 4,5 4,5
3 6 6 6 6 6
4 7 7 7 7 7
5 8,9 8,9 8,9 8,9 8,9


在oracle中有一个函数wm_concat,用这个函数就能够了spa

select t.id,ci

wm_concat(t.a) a,it

wm_concat(t.b) b,table

wm_concat(t.c) c,test

wm_concat(t.d) d,select

wm_concat(t.e) e from table t group by t.id;im

然而,这个函数的局限性在于,查出来的结果,字段类型是<clob>查询

其实除了这个wm_concat函数以外,oracle中还提供了另外一个函数listagg,也能够完成这样的效果

select t.id,
       listagg(t.a, ',') within GROUP(order by t.a) a,
       listagg(t.b, ',') within GROUP(order by t.b) b
  from tmp_test t
 group by t.id

相关文章
相关标签/搜索