使用 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中文网其他相关文章!