遇到這麼一個問題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