使用 LISTAGG 在 DB2 中產生逗號分隔的清單
本指南示範如何建立以逗號分隔的列值列表,這些列值會依 DB2 中的另一列分組。 LISTAGG
函數是實現這一目標的關鍵。
場景:
想像一個包含 ID
和 Role
列的表,其中每個 ID
可以有多個 Roles
。目標是為每個唯一 ID 輸出以逗號分隔的角色清單。
範例資料:
ID | Role |
---|---|
4555 | 2 |
4555 | 3 |
4555 | 4 |
期望輸出:
<code>4555, 2,3,4</code>
使用 LISTAGG 的解決方案:
DB2 的 LISTAGG
函數可以有效地連接組內的值。 語法是:
<code class="language-sql">LISTAGG(column_name, delimiter) WITHIN GROUP (ORDER BY column_name) OVER (PARTITION BY group_column)</code>
範例查詢:
讓我們使用一個名為 myTable
的範例表,其中包含 id
和 category
欄位:
<code class="language-sql">CREATE TABLE myTable (id INT, category INT); INSERT INTO myTable VALUES (1, 1); INSERT INTO myTable VALUES (2, 2); INSERT INTO myTable VALUES (5, 1); INSERT INTO myTable VALUES (3, 1); INSERT INTO myTable VALUES (4, 2);</code>
要取得每個 id
的逗號分隔 category
值:
<code class="language-sql">SELECT category, LISTAGG(id, ', ') WITHIN GROUP (ORDER BY id ASC) AS ids FROM myTable GROUP BY category;</code>
結果:
<code>CATEGORY | IDS ---------+----- 1 | 1, 3, 5 2 | 2, 4</code>
此查詢按 category
將行分組,並將每個群組中的 id
值進行排序,然後使用 LISTAGG
將它們連接成單一逗號分隔的字串。 結果顯示每個類別的以逗號分隔的 ID 清單。 這種方法有效解決了 DB2 中基於分組產生逗號分隔清單的問題。
以上是如何在 DB2 中按群組產生逗號分隔的清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!