最近編碼過程中出現了group by后,某些列會有多個值,而我需要把這些多個值的列進行拼接的情況,和大家分享一下。
有如下表student:

我們希望以class分組,每組的信息平鋪,效果如下

分組首先想到的肯定是group by:
select * from student s group by s.class;
我們會發現這樣會報錯,因為name和age有多個值,這個時候我們就可以使用wm_concat()方法來解決。
select wm_concat(s.name),wm_concat(s.age),s.class from student s gruop by s.class;
但是這個寫法又出現了一個新的問題,你會發現name和age這列的結果是

只需要把wm_concat前面加一個to_char就好了,而且結果就是上面想要的結果。
select to_char(wm_concat(s.name)) as name,
to_char(wm_concat(s.age)) as age,
s.class
from student s
gruop by s.class;
---------------------
還有一個函數LISTAGG(‘參數一’,’參數二’),這個函數和wm_comcat的作用類似,第一個參數是字段,第二個參數是多個值之間的分隔符,但是用法有些不同,例子如下:
select listagg(s.name,'-')within group(order by class) as name,
to_char(wm_concat(s.age)),
s.class
from student s
gruop by s.class;
--------------------- 
來源:https://blog.csdn.net/yufeng1397/article/details/78672607
