在 Oracle 中连接和分组多行
本文解决了在 Oracle 中连接和分组多行的挑战,允许您转换表将分散的数据转化为更有组织的结构。考虑以下场景:
您有一个包含两列 NAME 和 GROUP_NAME 的表:
NAME GROUP_NAME name1 groupA name2 groupB name5 groupC name4 groupA name3 groupC
您的目标是创建一个结果,其中每个唯一的 GROUP_NAME 值的名称都串联在一起:
GROUP_NAME NAMES groupA name1,name4 groupB name2 groupC name3,name5
在这种情况下,Oracle 11g 及更高版本中提供的 LISTAGG 函数提供了简单的解决方案:
SELECT group_name, LISTAGG(name, ', ') WITHIN GROUP (ORDER BY GROUP) "names" FROM name_table GROUP BY group_name
但是,如果您使用 11g 之前的 Oracle 版本,则可以使用分析来实现相同的结果:
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中文网其他相关文章!