ITPub博客

首页 > 数据库 > Oracle > 利用函数将多行数据合并一行(Oracle)

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

原创 Oracle 作者:SmartWilson 时间:2015-04-24 10:38:35 0 删除 编辑
工作上遇到一个问题,开发人员需要在界面上显示酒店入住信息,但其中可能存在多个入住旅客名称,需要在界面上一行显示酒店入住信息,但在旅客名称上利用逗号隔开多个旅客名字。废话少说,看例子。

表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博客 ” ,链接:https://blog.itpub.net/30220976/viewspace-1595313/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2015-04-24

  • 博文量
    34
  • 访问量
    106207