首頁 >資料庫 >mysql教程 >如何在 Oracle 中將多行組合成逗號分隔清單?

如何在 Oracle 中將多行組合成逗號分隔清單?

Barbara Streisand
Barbara Streisand原創
2025-01-19 17:51:10898瀏覽

How to Combine Multiple Rows into a Comma-Delimited List in Oracle?

在 Oracle 中將行聚合為逗號分隔清單

Oracle 提供了多個函數來將多行合併為一個具有逗號分隔值的字串。 這是資料聚合和報告生成的常見任務。 最突出的功能是 WM_CONCATLISTAGG

使用WM_CONCAT

在 11.2 之前的 Oracle 版本中可用,WM_CONCAT 使用指定的分隔符號連接多行中的值。 例如,要在架構中產生逗號分隔的表名稱清單:

<code class="language-sql">SELECT WM_CONCAT(table_name)
FROM user_tables;</code>

僱用LISTAGG

在 Oracle 11.2 中引入,LISTAGG 提供了比 WM_CONCAT 增強的功能。 它允許更好的控制,包括指定分隔符號和處理 NULL 值。 以下範例建立以逗號分隔的表名列表,省略 NULL 條目:

<code class="language-sql">SELECT LISTAGG(table_name, ', ') WITHIN GROUP (ORDER BY table_name)
FROM user_tables;</code>

實際應用

想像一個查詢,為每個人檢索多個公民身分記錄。為了避免冗餘條目,LISTAGG 可以用作子查詢來為每個人產生以逗號分隔的公民身份清單:

<code class="language-sql">SELECT person_id,
       (SELECT LISTAGG(citizenship, ', ') WITHIN GROUP (ORDER BY citizenship)
        FROM citizenship
        WHERE person_id = t.person_id) AS citizenship_list
FROM person t;</code>

這將傳回每人一行,並在 citizenship_list 列中使用逗號分隔的公民身份字串。

總結

WM_CONCATLISTAGG 提供了強大且通用的方法來將多行聚合到 Oracle 中以逗號分隔的清單中。 這些函數簡化了資料操作並提高了 SQL 查詢的清晰度。

以上是如何在 Oracle 中將多行組合成逗號分隔清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn