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

Откуда:
Сообщений: 10
Добрый вечер. Подскажите, а то уже дым из ушей идет...
Есть таблица (ID, Value) вида:
1 20
1 35
2 23
3 123
3 456
3 80

Как сформировать запрос, чтобы получилось три строки

1 20+35
2 23
3 123+456+80

Но не сумма, а именно строка с "+"-ками
9 июл 19, 20:21    [21923776]     Ответить | Цитировать Сообщить модератору
 Re: Столбы в строки  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36493
https://www.sql.ru/faq/faq_topic.aspx?fid=130
https://www.sql.ru/faq/faq_topic.aspx?fid=731
9 июл 19, 20:22    [21923777]     Ответить | Цитировать Сообщить модератору
 Re: Столбы в строки  [new]
Подпол
Member

Откуда:
Сообщений: 10
Гавриленко Сергей Алексеевич, Спасибо... все в инете есть, только нужно правильно сформулировать поисковую строку... с этим сложности.
9 июл 19, 20:29    [21923781]     Ответить | Цитировать Сообщить модератору
 Re: Столбы в строки  [new]
iiyama
Member

Откуда:
Сообщений: 615
Подпол,

PIVOT+TSQL
10 июл 19, 10:35    [21924004]     Ответить | Цитировать Сообщить модератору
 Re: Столбы в строки  [new]
assmsk
Member

Откуда:
Сообщений: 151
WITH CTE AS (
SELECT * FROM (VALUES (1,20),(1,35),(2,23),(3,123),(3,456),(3,80)) i (Id,VALUE)
)

SELECT DISTINCT a.ID,
REVERSE(STUFF(REVERSE((SELECT CAST(b.VALUE AS VARCHAR) + '+' FROM CTE as b WHERE a.ID = b.ID  FOR XML PATH(''))),1,1,''))
FROM CTE as a
10 июл 19, 10:49    [21924021]     Ответить | Цитировать Сообщить модератору
 Re: Столбы в строки  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 5029
Подпол,

для SQL2017+

WITH data AS (
SELECT * FROM (VALUES (1,20),(1,35),(2,23),(3,123),(3,456),(3,80)) i (Id,VALUE)
)
select
	id
	,STRING_AGG([Value],'+') within group (order by [value]) [ttl]
from data
group by id 
10 июл 19, 11:43    [21924062]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить