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

Откуда:
Сообщений: 65
Не удалось нормально придумать заголовок.

Имею таблицу вида:
автор
1 | Имя1
2 | Имя2
2 | Имя3
3 | Имя4
3 | Имя5
3 | Имя6
4 | Имя7


нужно сделат GROUP BY по первому полю, но чтоб данные из второго поля для этих значений - объединились и были примерно такого вида:
автор
1 | Имя1
2 | Имя2 Имя3
3 | Имя4 Имя5 Имя 6
4 | Имя 7


легкого решения, кроме построения циклов и перебора - не могу придумать, но вероятно что-то есть, о чем я не знаю.
20 фев 13, 10:57    [13953312]     Ответить | Цитировать Сообщить модератору
 Re: Объединение всех результатов в строку  [new]
ФАК
Guest
https://www.sql.ru/faq/faq_topic.aspx?fid=130
20 фев 13, 10:59    [13953322]     Ответить | Цитировать Сообщить модератору
 Re: Объединение всех результатов в строку  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
https://www.sql.ru/faq/faq_topic.aspx?fid=130
https://www.sql.ru/faq/faq_topic.aspx?fid=731
20 фев 13, 11:00    [13953327]     Ответить | Цитировать Сообщить модератору
 Re: Объединение всех результатов в строку  [new]
eXeLe
Member

Откуда:
Сообщений: 65
то есть временными таблицами. на чтож, тоже выход, вполне простой, попробую, спасибо.
20 фев 13, 11:01    [13953337]     Ответить | Цитировать Сообщить модератору
 Re: Объединение всех результатов в строку  [new]
Glory
Member

Откуда:
Сообщений: 104751
eXeLe
то есть временными таблицами.

Т.е. читать FAQ
20 фев 13, 11:02    [13953341]     Ответить | Цитировать Сообщить модератору
 Re: Объединение всех результатов в строку  [new]
Нечитатель
Guest
eXeLe
то есть временными таблицами. на чтож, тоже выход, вполне простой, попробую, спасибо.

Нечитатель.

select [Тип] ,( select [Имя]+': '+cast([Количество] as nvarchar)+ ',' as 'data()' from test t2 where t1.[Тип]=t2.[Тип] for xml path('') )
from dbo.TEST t1
group by [Тип]
20 фев 13, 11:03    [13953346]     Ответить | Цитировать Сообщить модератору
 Re: Объединение всех результатов в строку  [new]
eXeLe
Member

Откуда:
Сообщений: 65
eXeLe,

да, слишком бегло глянул, понял что мой случай, убежал благодарить =)
20 фев 13, 11:04    [13953350]     Ответить | Цитировать Сообщить модератору
 Re: Объединение всех результатов в строку  [new]
Александр Бердышев
Member

Откуда: Санкт-Петербург
Сообщений: 401
Типичный вопрос, который хотя бы раз в жизни возникает у любого программиста MS SQL

Ведь хочется иметь аналого SUM() для строк, а его нет.

Покапался у себя в архиве, и нашёл краткий пример решения данной проблемы:

Есть таблица "Счет"
В ней есть поля НомерСчета и ID_Контрагент

Следующий код выводит 2 столбца:
ID_Контрагент | Через запятую номера счетов, у которых совпадает контрагент

SELECT ID_Контрагент, 
STUFF((SELECT ', '+ НомерСчета FROM Счет TT WHERE TT.ID_Контрагент=T.ID_Контрагент FOR XML PATH('')),1,1,'') names
FROM Счет T
GROUP BY ID_Контрагент


Вашу проблему можно решить таким же образом.

Работает на 2-3 порядка быстрее чем если делать курсором.
22 фев 13, 16:55    [13968102]     Ответить | Цитировать Сообщить модератору
 Re: Объединение всех результатов в строку  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Александр Бердышев,

еще один нечитатель:)?
22 фев 13, 16:59    [13968121]     Ответить | Цитировать Сообщить модератору
 Re: Объединение всех результатов в строку  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
WarAnt
Александр Бердышев,

еще один нечитатель:)?
Злостный!
Да ещё авторское право нарушает!
22 фев 13, 19:38    [13968868]     Ответить | Цитировать Сообщить модератору
 Re: Объединение всех результатов в строку  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Александр Бердышев,

однако ж, это будет плохо работать, если в ИмяX входят спецсимволы XML.
Надо совсем немного докрутить
22 фев 13, 19:40    [13968880]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить