首頁 >資料庫 >mysql教程 >如何在 DB2 中按群組產生逗號分隔的清單?

如何在 DB2 中按群組產生逗號分隔的清單?

Barbara Streisand
Barbara Streisand原創
2025-01-09 14:41:43182瀏覽

How to Generate Comma-Separated Lists in DB2 by Group?

使用 LISTAGG 在 DB2 中產生逗號分隔的清單

本指南示範如何建立以逗號分隔的列值列表,這些列值會依 DB2 中的另一列分組。 LISTAGG 函數是實現這一目標的關鍵。

場景:

想像一個包含 IDRole 列的表,其中每個 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 的範例表,其中包含 idcategory 欄位:

<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中文網其他相關文章!

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