在 Oracle 中连接和分组多行
在 Oracle 中,根据分组条件连接记录的任务可能具有挑战性。考虑这样一个表:
NAME GROUP_NAME name1 groupA name2 groupB name5 groupC name4 groupA name3 groupC
要实现基于“GROUP_NAME”对“NAME”列进行分组和连接的预期结果,您可以利用 Oracle 11g 或更高版本中的 LISTAGG 函数:
SELECT group_name, LISTAGG(name, ', ') WITHIN GROUP (ORDER BY GROUP) "names" FROM name_table GROUP BY group_name
但是,如果您使用的 Oracle 版本不支持 LISTAGG,还有其他方法。一种方法利用分析函数:
select grp, ltrim(max(sys_connect_by_path (name, ',' )), ',') scbp from (select name, grp, row_number() over (partition by grp order by name) rn from tab ) start with rn = 1 connect by prior rn = rn-1 and prior grp = grp group by grp order by grp
通过组合这些技术,即使没有 LISTAGG,您也可以有效地连接和分组 Oracle 中的多行。
以上是如何在 Oracle 中连接和分组行?的详细内容。更多信息请关注PHP中文网其他相关文章!