首页 > 数据库 > mysql教程 > 如何在 Oracle 中连接和分组多行?

如何在 Oracle 中连接和分组多行?

DDD
发布: 2025-01-04 05:45:39
原创
722 人浏览过

How Can I Concatenate and Group Multiple Rows in Oracle?

在 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板