использование рекурсивной функции для симуляции group_concat - PullRequest
0 голосов
/ 22 января 2019

У меня есть таблица, подобная

ID NAME
1  STALIN
2  MERWIN
1  AMALA
1 RAYON

Я хочу получить значение как

ID NAME
1 STALIN,AMALA,RAYON
2 MERWIN

Как это сделать с помощью рекурсивной функции

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Вы можете использовать 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
0 голосов
/ 22 января 2019

Вы можете сделать это, используя 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

Демонстрационная версия enter image description here

Перейдите по этой ссылке и ознакомьтесь с примером 3. В нем объясняется, почему использовать путь XML над рекурсивным курсором.

...