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