oracle wm_concat排序问题

本文介绍了一个使用wm_concat函数时出现的排序问题,并提供了解决方案。通过使用窗口函数over(partition by ... order by ...)和聚合函数max()组合的方式,实现了按指定顺序连接字符串的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

在使用wm_concat的时候,会遇到结果并没有按照表中顺序的问题,为什么会出现这种情况,还不太清楚,但已有解决办法。

首先,数据源如图一所示。week表示星期几,比如当week=1的时候,表示星期一有四个开始时间和结束时间的记录,

想要得到图二的效果,表示按week分组,把周X的时间段的多列转成一行。

图1  数据源

 

图二  乱序的结果

 如果直接使用 以下语句,得到的结果将是图二所示

 select week,wm_concat((kssj||'~'||jssj))sjd from tablename group by week 

 

哪怕先对表排序,这样也是没用的

select week,wm_concat((kssj||'~'||jssj))sjd from (select * from tablename order by id) group by week 

 

解决方案:


select a.week,max(key) sjd from(select week, wm_concat((kssj||'~'||jssj)) 
over (partition by week order by id) key from tablename)a group by a.week

结果:

图3  有序的结果
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值