在 Oracle 中,有效地将多行连接成单行通常是所需的操作。此问题深入研究一个特定场景,其中表包含以下格式的数据:
question_id | element_id |
---|---|
1 | 7 |
1 | 8 |
2 | 9 |
3 | 10 |
3 | 11 |
3 | 12 |
目标是将这些数据转换为以下所需结果:
question_id | element_id |
---|---|
1 | 7,8 |
2 | 9 |
3 | 10,11,12 |
完成有效地完成这项任务无需借助存储过程,Oracle 11gR2 引入了 LISTAGG 子句。这个非凡的子句允许直接在单个 SQL 语句中执行此类串联操作。
以下是在 Oracle 查询中实现它的方法:
SELECT question_id, LISTAGG(element_id, ',') WITHIN GROUP (ORDER BY element_id) FROM YOUR_TABLE GROUP BY question_id;
LISTAGG 子句采用以下形式:
LISTAGG(expression, delimiter) WITHIN GROUP (ORDER BY expression)
在本例中,我们指定“element_id”列作为表达式,并指定“,”作为分隔符分离连接的值。 WITHIN GROUP 子句确保在每个组内执行串联,该组由“question_id”列定义。
值得注意的是,生成的串联字符串可能会超出 VARCHAR2 数据类型的最大长度限制( 4000 个字符)。为了解决这个潜在问题,Oracle 12cR2 引入了 ON OVERFLOW TRUNCATE/ERROR 选项。通过合并此选项,您可以指定是否截断字符串或在超出长度限制时引发错误。
以上是如何在 Oracle SQL 中有效地将多行连接成单行?的详细内容。更多信息请关注PHP中文网其他相关文章!