我想在一行中选择两个行值并连接。
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
我该怎么做?
答案 0 :(得分:0)
发布的链接@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
如果初始表上有唯一索引,则Indexed
CTE可以替换为对原始表的引用。