使用背景
笔者长期从事于各种数据应用查询和抽取工作,为各种数据服务提供技术支撑,在笔者的过程经历中,觉得比较头痛的就是有关数据的需要是将一个1对多关系的两类信息整合到excel的一行记录中,针对这种需求,笔者找到了一个oracle所提供的一种函数来满足此要求,它就是wm_concat
基本使用方法
假设有表如下:
而我们想要的结果为:
那么我们要根据原始表得到目标结果集的话,即可以通过wm_concat函数,语句如下:
select u_id,wmsys.wm_concat(goods) from 原始表 group by u_id
此外wm_concat函数中还可以传入多个参数,使用也很简单
局限性
wm_concat函数可以满足日常基本简单的1对多关系合并成一行的操作,但是局限性也是很明显的,就是在多的关系的拼接过程中,不可以超出oracle本身的字符串的长度限制,否则就会出错。各位大神如果有更好的替代办法也可以指点一二。
类似函数
与wm_concat类似的还有聚合函数LISTAGG,wm_concat是oracle10里面才有的,而listagg是11才出来的,大家有兴趣也可以试试喔。