如何通过逗号分隔将 2 行合并为一行?
Posted
技术标签:
【中文标题】如何通过逗号分隔将 2 行合并为一行?【英文标题】:How to Merge 2 Rows into one by comma separate? 【发布时间】:2015-09-16 20:02:38 【问题描述】:我需要将这些单独的行合并到一列,我现在如何用逗号分隔合并列,
+---------------+-------+-------+
|CID |Flag |Value |
+---------------+-------+-------+
|1 |F |10 |
|1 |N |20 |
|2 |F |12 |
|2 |N |23 |
|2 |F |14 |
|3 |N |21 |
|3 |N |22 |
+---------------+-------+-------+
期望的结果可以是任何东西,
+-----------+----------------------------+ +--------------------------+
|Part Number| Value | | Value |
+-----------+----------------------------+ +--------------------------+
| 1 | 1|F|10 ; 1|N|20 | Or | 1|F|10 ; 1|N|20 |
| 2 | 2|F|12 ; 2|N|23 ; 2|F|14 | | 2|F|12 ; 2|N|23 ; 2|F|14 |
| 3 | 3|N|21 ; 3|N|22 | | 3|N|21 ; 3|N|22 |
+-----------+----------------------------+ +--------------------------+
注意:
任何正确方向的小例子提示都绰绰有余
编辑: 我在表格中有大量数据,例如存在父子关系的数千条记录。我必须通过逗号分隔值将其转储到文本文件中作为记录在单行中。认为由于主记录与许多其他表有关系,那么所有这些记录都必须打印成一条大线。
我试图通过创建查询来实现,这样负载可以分布在数据库上,而我在业务中唯一需要担心的就是将逻辑转储到文本文件或我们将来需要的任何形式中。
【问题讨论】:
你能解释一下试图获得这种表示的原因吗? @vkp 求解释 似乎在 DB2 中您已经创建了一个自定义函数。查看here 的示例以帮助您入门。 DB2 comma separated output的可能重复 @jradich1234 可以实现合并单列,但合并整行就是我想要的 【参考方案1】:您可以尝试使用LISTAGG,您的查询将如下所示:
select a.cid, a.cid || listagg(a.flag || '|' || a.value, ',')
from foo.dat a
group by a.cid
您可以使用不同的分隔符,当然还可以考虑结果的格式。
【讨论】:
DB2 ZOS 没有LISTAGG
,但可以使用XMLAGG
复制以上是关于如何通过逗号分隔将 2 行合并为一行?的主要内容,如果未能解决你的问题,请参考以下文章