在没有存储过程的 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中文网其他相关文章!