使用递归函数模拟group_concat

时间:2019-01-22 17:55:52

标签: sql sql-server function recursion sql-server-2012

我有一张类似的桌子

ID NAME
1  STALIN
2  MERWIN
1  AMALA
1 RAYON

我希望退出

ID NAME
1 STALIN,AMALA,RAYON
2 MERWIN

如何使用递归函数

2 个答案:

答案 0 :(得分:2)

您可以使用XML Path

SELECT ID, NAME = 
STUFF((SELECT ', ' + NAME
       FROM your_table b 
       WHERE b.ID = a.ID 
      FOR XML PATH('')), 1, 2, '')
FROM your_table a
GROUP BY ID

Live Demo enter image description here

Follow this link并查看情况3。它说明了为什么在递归游标上使用XML路径。

答案 1 :(得分:0)

您可以使用FOR XML PATH来获得结果:

例如:

DECLARE @EXAMPLE TABLE (ID int, NAME nvarchar(10))
INSERT @EXAMPLE VALUES (1,'STALIN'),(2,'MERWIN'),(1,'AMALA'),(1,'RAYON')

SELECT
    ID,
    SUBSTRING(NAME,0,LEN(NAME)) AS NAME
FROM (  SELECT DISTINCT 
            T1.ID,
            STUFF(( SELECT DISTINCT '' + t2.NAME + ','
                    FROM @EXAMPLE T2
                    WHERE T1.ID = T2.ID
                    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') 
                    ,1,0,'') NAME
        FROM @EXAMPLE t1) AS info