oracle在group by时某列有多个值的拼接
?
最近編碼過程中出現了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
?
轉載于:https://www.cnblogs.com/sandswitch/p/11124758.html
總結
以上是生活随笔為你收集整理的oracle在group by时某列有多个值的拼接的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql修改binlog日志过期时间
- 下一篇: 字符数组和字符串的小细节