首页 >数据库 >mysql教程 >如何在没有存储过程的 Oracle 中将多行连接成一行?

如何在没有存储过程的 Oracle 中将多行连接成一行?

Patricia Arquette
Patricia Arquette原创
2025-01-05 15:27:40304浏览

How to Concatenate Multiple Rows into a Single Row in Oracle Without Stored Procedures?

在没有存储过程的 Oracle 中将多行连接成一行

当前的问题寻求一种在 Oracle 中将多行连接成一行的方法一种无需求助于存储过程的方法。给定的数据集由具有重复 Question_id 值的 Question_id 和 element_id 列组成。期望的结果是将与同一 Question_id 关联的 element_id 值合并到一行中。

可以使用 Oracle 11gR2 中引入的 LISTAGG 子句来实现此目的。语法如下:

SELECT question_id,
       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id)
FROM YOUR_TABLE
GROUP BY question_id;

此子句连接每个 Question_id 的 element_id 值,并用指定的分隔符(本例中为逗号)分隔。请注意,WITHIN GROUP 子句可确保在串联之​​前对值进行排序。

对于 Oracle 版本 12cR2 及更高版本,ON OVERFLOW TRUNCATE/ERROR 子句可用于处理字符串长度限制的潜在问题:

SELECT question_id,
       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id)
       ON OVERFLOW TRUNCATE
FROM YOUR_TABLE
GROUP BY question_id;

SELECT question_id,
       LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id)
       ON OVERFLOW ERROR
FROM YOUR_TABLE
GROUP BY question_id;

通过遵守语法并使用通过适当的选项,开发人员可以将多行连接成一行,而无需在 Oracle 中创建存储过程。

以上是如何在没有存储过程的 Oracle 中将多行连接成一行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn