Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос. Собрать строку  [new]
dogalevs
Member

Откуда:
Сообщений: 134
Добрый день! Подскажите!
Есть запрос, он выдает такой результат:

группа имя
350 Иванов
350 Петров
480 Иванов
480 Петров

Возможно ли как-то собрать такого типа строку: 350 Иванов, Петров
480 Иванов, Петров
16 сен 13, 13:56    [14844508]     Ответить | Цитировать Сообщить модератору
 Re: Запрос. Собрать строку  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
https://www.sql.ru/faq/faq_topic.aspx?fid=731
16 сен 13, 13:57    [14844514]     Ответить | Цитировать Сообщить модератору
 Re: Запрос. Собрать строку  [new]
ROLpogo
Member

Откуда: Реутов
Сообщений: 216
dogalevs,
create table #t
(
  nGroup int,
  Name   varchar(255)
)

insert into #t
  select 350, 'Иванов' union all
  select 350, 'Петров' union all
  select 480, 'Иванов' union all
  select 480, 'Петров'

declare @sRes varchar(8000)
set @sRes = ''
;with cte as
(
  select 1 as nOrder, nGroup, '' as Name, row_number() over(order by nGroup) as rn from #t group by nGroup
  union all
  select 2 as nOrder, nGroup, Name, row_number() over(partition by nGroup order by Name) from #t
)
-- вариант в 1 строку:
--select @sRes = @sRes + case when nOrder = 1 then cast(nGroup as varchar) else case when rn != 1 then ',' else '' end + Name end from cte order by nGroup, nOrder, Name
-- вариант с разбиением строк по группам:
select @sRes = @sRes + case when nOrder = 1 then case when rn != 1 then char(13) else '' end + cast(nGroup as varchar) else case when rn != 1 then ',' else '' end + Name end from cte order by nGroup, nOrder, Name

select @sRes

drop table #t
16 сен 13, 15:48    [14845407]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить