Чтобы ответить на ваш конкретный вопрос, вы можете добиться этого с помощью for xml
и некоторых небольших хитростей:
declare @t table(Col1 int);
insert into @t values(1),(2),(3);
select 'Values for Col1 are '
+ stuff((select ', ' + cast(Col1 as varchar(5))
from @t
for xml path('')
),1,2,'');
Это работает, объединяя каждое значение строки в очень минимальную строку xml
только с запятой ипробел, ограничивающий каждое значение.Первая запятая и пробел затем удаляются с помощью функции stuff
.
В этом случае вывод будет: Values for Col1 are 1, 2, 3
Если у вас есть столбец, который вы хотитечтобы сгруппировать ваши выходные данные, вы можете добавить это в вышеприведенный скрипт следующим образом:
declare @t table(Id int, Val int);
insert into @t values(1,1),(1,2),(1,3),(2,4),(2,2);
with Ids as
(
select distinct Id
from @t
)
select 'Values for ID ' + cast(Ids.Id as varchar(5)) + ' are '
+ stuff((select ', ' + cast(t.Val as varchar(5))
from @t as t
where Ids.Id = t.Id
for xml path('')
),1,2,'') as Vals
from Ids
order by IDs.Id;
Какие выходные данные:
+-----------------------------+
| Vals |
+-----------------------------+
| Values for ID 1 are 1, 2, 3 |
| Values for ID 2 are 4, 2 |
+-----------------------------+