在 Oracle 中將行聚合為逗號分隔清單
Oracle 提供了多個函數來將多行合併為一個具有逗號分隔值的字串。 這是資料聚合和報告生成的常見任務。 最突出的功能是 WM_CONCAT
和 LISTAGG
。
使用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_CONCAT
和 LISTAGG
提供了強大且通用的方法來將多行聚合到 Oracle 中以逗號分隔的清單中。 這些函數簡化了資料操作並提高了 SQL 查詢的清晰度。
以上是如何在 Oracle 中將多行組合成逗號分隔清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!