利用函数将多行数据合并一行(Oracle)

工作上遇到一个问题,开发人员需要在界面上显示酒店入住信息,但其中可能存在多个入住旅客名称,需要在界面上一行显示酒店入住信息,但在旅客名称上利用逗号隔开多个旅客名字。废话少说,看例子。

表Consumptions_Hotel
id  register
-------------------
1  张三
1  李四
2  王五

希望SQL查询得到的结果为
id  register
-------------------
1  张三,李四
2  王五

首先考虑的是当前Oracle数据库版本为Oracle 11g R2
可以使用wm_concat函数进行处理(此函数只适用于10g以上版本)
即select id,wm_concat(register) from Consumptions_Hotel group by id;
这样可以得到以上的结果。

但是问题来了,在整个业务当中,存在多个版本的数据库,有开发库、Demo库、生产库,当中的开发库是12c版本,其他都为11g版本,在测试当中发现该函数wm_concat无法使用,因为在12c版本当中此函数被移除了。
所以一开始打算在12c利用网上的脚本在wmsys用户下创建相关函数、存储过程来创建此函数,但是事实证明,无法正常使用。所以就尝试寻找另一个函数。

利用listagg函数可以解决以上问题,查询语句即为select id,listagg(register,',') within group (order by register)  from Consumptions_Hotel group by id;




来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30220976/viewspace-1595313/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30220976/viewspace-1595313/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值