oracle实现⾏转列功能,并使⽤逗号进⾏隔开拼接,成为⼀条数据
有两种⽅式
1、第⼀种:使⽤WM_CONCAT函数,不过这个函数已经被oracle弃⽤了,不建议使⽤,如果数据库中还有这个函数也可以使⽤
select sfc_no,wm_concat(mark_operation_id) from bp_marking where create_date>sysdate-1/24group by sfc_no
简单说⼀下就是查询bp_marking表中的sfc_no与对应的所有的mark_operation_id的字段,并且合并到⼀列中
结果显⽰如下:
实现去重:就是把重复的去掉
直接加⼀个distinct即可
select sfc_no,wm_concat(distinct mark_operation_id) from bp_marking where create_date>sysdate-1/24group by sfc_no
具体使⽤⽅式参考:
如果没有这个函数也想添加的话,可以试⼀下如下的⽅法(具体是否能⽤我没试过)
2、第⼆种:使⽤LISTAGG函数
select sfc_no,LISTAGG(mark_operation_id,',') within group (order by mark_operation_id) from bp_marking where create_date>sysdate-1/24group by sfc_no
结果跟上⾯的结果是⼀样的。
具体使⽤参考:字符串函数去重
如何实现去重:
把表再嵌套⼀层即可。即先把重复的数据去掉,然后再对这个表进⾏listagg操作。
select sfc_no,LISTAGG(mark_operation_id,',') within group (order by mark_operation_id) from (select distinct sfc_no,mark_operation_id from bp_marking where create_date 执⾏完之后有时候会显⽰字符串连接过长的问题,因为listagg设定的字符串长度只有4000,超过4000就会报错。具体处理⽅法暂时也不清楚。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。