在 Oracle 中连接和分组多行
如果您有一个包含多行的表需要连接和分组,请使用Oracle 11g 中的 LISTAGG 函数提供了一个简单的解决方案:
SELECT group_name, LISTAGG(name, ', ') WITHIN GROUP (ORDER BY GROUP) AS "names" FROM name_table GROUP BY group_name
LISTAGG 函数聚合一组行中的多个值,并用指定的分隔符(此处为“,”)分隔它们。它简化了连接和分组的过程,从而生成所需的结果。
对于 Oracle 11g 之前的数据库,可以使用使用分析的替代方法:
SELECT grp, ltrim(max(sys_connect_by_path(name, ',' )), ',') AS scbp FROM ( SELECT name, grp, row_number() OVER (PARTITION BY grp ORDER BY name) AS rn FROM tab ) START WITH rn = 1 CONNECT BY PRIOR rn = rn - 1 AND PRIOR grp = grp GROUP BY grp ORDER BY grp
此查询利用 CONNECT BY子句和 row_number() 分析函数以迭代方式连接和分组值,产生与 LISTAGG 相同的输出方法。
以上是如何在 Oracle 中连接和分组多行?的详细内容。更多信息请关注PHP中文网其他相关文章!