遇到这么一个问题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