Sql 如何在DB2中一行中选择两个行值

Sql 如何在DB2中一行中选择两个行值,sql,db2,concatenation,Sql,Db2,Concatenation,我想在一行中选择两个行值并连接 id value ------------ 1 abc 1 def 2 ghi 3 jkl 3 mno 3 prs 结果应该如下所示: id value ------------ 1 abc, def 2 ghi 3 jkl, mno, prs 我该怎么做?发布的@Dems链接在功能上与您的要求完全相同 但是,如果您没有访问xml函数的权限,这里有一个递归

我想在一行中选择两个行值并连接

id     value
------------
1      abc
1      def
2      ghi
3      jkl
3      mno
3      prs
结果应该如下所示:

id     value
------------
1      abc, def
2      ghi
3      jkl, mno, prs

我该怎么做?

发布的@Dems链接在功能上与您的要求完全相同

但是,如果您没有访问xml函数的权限,这里有一个递归CTE版本:

WITH Indexed(id, value, index) 
            as (SELECT id, value, ROW_NUMBER() OVER(PARTITION BY id ORDER BY value)
                FROM ValueTable),
     Concatenated(id, index, concatenated) 
                 as (SELECT id, index, value
                     FROM Indexed
                     WHERE index = 1
                     UNION ALL
                     SELECT a.id, a.index + 1, a.concatenated || ', ' || b.value
                     FROM Concatenated as a
                     JOIN Indexed as b
                     ON b.id = a.id
                     AND b.index = a.index + 1)
SELECT a.id, a.value
FROM Concatenated as a
EXCEPTION JOIN Indexed as b
ON b.id = a.id
AND b.index > a.index

如果初始表上有一个唯一的索引,则
索引的
CTE可以替换为对原始表的引用。

这似乎有些轻率,但通常的答案是
。如果出于显示原因而要执行此操作,请在应用程序中执行此处理。如果你想按照数据的原因来做,将数据保持为标准化的1:多关系,并考虑以这种格式处理它(如果你发布你正在处理的用例,我们可以帮助它)。但是将多个值压缩成一个值通常是一种SQL反模式,它会给未来带来更多的痛苦。@Dems你是对的。原因是厨师的特殊要求。我仍然建议尽量避免这样做。需要这样做通常是一个更普遍问题的症状。但我之前评论中的链接可能会让你朝着正确的方向去做。@Dems感谢你的帮助和评论。