свернуть строки с одинаковым идентификатором в список через запятую - PullRequest
3 голосов
/ 11 мая 2011

Основываясь на некотором поиске, я придумал следующее:

drop table #temp
create table #temp
(
    id int,
    name nvarchar(max)
)

insert into #temp (id,name) values (1,'bla1')
insert into #temp (id,name) values (1,'bla2')
insert into #temp (id,name) values (3,'bla3')

;with cte1 as
(
    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 #temp t1
)
select id, name from cte1 group by id, name

Это лучший способ сделать что-то?Спасибо!

Кристиан

1 Ответ

2 голосов
/ 11 мая 2011

Этот подход немного лучше, так как он просто сортирует по 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, вам, вероятно, будет лучше ее использовать.

Используемый вами подход работает правильно только в том случае, если гарантируется, что данные не содержат никаких символов, таких как <, >, &

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...