Oracle listagg,wm_concat函数行转列结果去重Oracle 11g/19c版本
1、准备数据表
2、根据学生名(stu_name)分组,学生名相同的,学生年龄(stu_age)用逗号拼接,使用 listagg()函数法拼接
3、上图中出现了两个12,12,实现去重
3.1 listagg() 函数 去重
【方法1】使用正则表达式去重,oracle 11g 和oracle 19c都适用
-
select
-
stu_name,
-
regexp_replace(listagg(stu_age,',') within group (order by stu_age),
-
'([^,] )(,\1)*(,|$)','\1\3') stu_age
-
from student group by stu_name
【方法2】先把数据去重在使用listagg()函数,oracle 11g 和oracle 19c都适用
-
select
-
stu_name,
-
listagg(stu_age,',') within group (order by stu_age) stu_age
-
from (select DISTINCT stu_name,stu_age from student)
-
group by stu_name
【方法3】直接使用listagg( )函数 distinct方法,适用oracle 19c 不适用oracle 11g
-
select
-
stu_name,
-
listagg(DISTINCT stu_age,',') within group (order by stu_age) stu_age
-
from student
-
group by stu_name
【方法3简化】:oracle 19c 可以不写 within group(order by xxx),如果需要对去重结果排序可以加上
-
select
-
stu_name,
-
listagg(DISTINCT stu_age,',') stu_age
-
from student
-
group by stu_name
3.2 wm_concat()函数 去重
【方法1】直接使用wm_concat( )函数 distinct方法,适用oracle 11g 不适用oracle 19c
-
select
-
stu_name,
-
wm_concat(DISTINCT stu_age) stu_age
-
from student
-
group by stu_name
使用Oracle 19c 测试 wm_concat()函数会报错
总结:尽量使用listagg函数,避免使用wm_concat,11gr2之后的版本中WM_CONCAT函数已经弃用,使用listagg函数代替wm_concat
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfgifei
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13