Этот подход немного лучше, так как он просто сортирует по id
, а не id,name
;WITH cte AS
(
SELECT DISTINCT id
FROM #temp
)
SELECT id, STUFF((SELECT ', ' + CAST(t2.name AS NVARCHAR(MAX))
FROM #temp t2 WHERE t1.id = t2.id
FOR XML PATH('')),1,1,'') name
FROM cte t1
Если у вас уже есть таблица, содержащая только отдельные поля id
, вам, вероятно, будет лучше ее использовать.
Используемый вами подход работает правильно только в том случае, если гарантируется, что данные не содержат никаких символов, таких как <
, >
, &