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

Откуда:
Сообщений: 31
Всем привет.

Имеется таблица след. вида
count_of_RRPCatM
7Category1
8Category2
5Category3
3Category4
59Category5
2Category6
5Category7


Необходимо привести произвести сумму по полю count_of_RRP и сложить все строки поля Catm через запятую, иными словами должно получится
count_of_RRPCatMan
89Category1 Category2


Подскажи пожалуйста, как лучше сделать, пробовал через pivot с дальнейшим использованием concat, но есть проблема в том, что данные каждый день будут новые.
12 дек 19, 15:01    [22038755]     Ответить | Цитировать Сообщить модератору
 Re: объединение одного столбца в строку  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 5233
https://www.mssqltips.com/sqlservertip/5542/using-for-xml-path-and-stringagg-to-denormalize-sql-server-data/
12 дек 19, 15:30    [22038808]     Ответить | Цитировать Сообщить модератору
 Re: объединение одного столбца в строку  [new]
msLex
Member

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

select @@version
12 дек 19, 15:30    [22038809]     Ответить | Цитировать Сообщить модератору
 Re: объединение одного столбца в строку  [new]
plorkie
Member

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

MSSQL 2014
12 дек 19, 15:57    [22038842]     Ответить | Цитировать Сообщить модератору
 Re: объединение одного столбца в строку  [new]
assmsk
Member

Откуда:
Сообщений: 173
;WITH CTE AS 
(
Select  count_of_RRP ,	CatM from (values
 (7 ,	'Category1')
,(8 ,	'Category2')
,(5 ,	'Category3')
,(3 ,	'Category4')
,(59,	'Category5')
,(2 ,	'Category6')
,(5 ,	'Category7')) t (count_of_RRP ,	CatM)
)


SELECT  SUM(count_of_RRP),(SELECT CatM + ',' FROM CTE FOR XML PATH('')) FROM CTE
12 дек 19, 16:04    [22038852]     Ответить | Цитировать Сообщить модератору
 Re: объединение одного столбца в строку  [new]
plorkie
Member

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

спасибо, но если значения динамические каждый раз на входе? выходит через цикл надо
12 дек 19, 16:29    [22038903]     Ответить | Цитировать Сообщить модератору
 Re: объединение одного столбца в строку  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31332
plorkie
спасибо, но если значения динамические каждый раз на входе? выходит через цикл надо
Это и есть решение для "динамических" данных.
12 дек 19, 16:49    [22038933]     Ответить | Цитировать Сообщить модератору
 Re: объединение одного столбца в строку  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Однако, это неполное решение, ибо в CatM, наверно, могут быть спецсимволы.
Да и последняя запятая болтается...
SELECT SUM(count_of_RRP),STUFF((SELECT ', '+CatM FROM CTE FOR XML PATH('')).value('.','nvarchar(max)'),1,2,N'')
FROM CTE
12 дек 19, 16:58    [22038954]     Ответить | Цитировать Сообщить модератору
 Re: объединение одного столбца в строку  [new]
plorkie
Member

Откуда:
Сообщений: 31
Вопрос закрыт, спасибо.
12 дек 19, 17:25    [22038994]     Ответить | Цитировать Сообщить модератору
 Re: объединение одного столбца в строку  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4684
Вообще уже есть STRING_AGG


https://docs.microsoft.com/en-us/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-ver15

Кто-нибудь юзал?
13 дек 19, 08:28    [22039325]     Ответить | Цитировать Сообщить модератору
 Re: объединение одного столбца в строку  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31332
a_voronin
Вообще уже есть STRING_AGG


https://docs.microsoft.com/en-us/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-ver15

Кто-нибудь юзал?
plorkie
MSSQL 2014
13 дек 19, 08:55    [22039334]     Ответить | Цитировать Сообщить модератору
 Re: объединение одного столбца в строку  [new]
msLex
Member

Откуда:
Сообщений: 8000
a_voronin
Вообще уже есть STRING_AGG


https://docs.microsoft.com/en-us/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-ver15

Кто-нибудь юзал?

Конечно, отличная штука, но автору не подходит.
13 дек 19, 15:52    [22039879]     Ответить | Цитировать Сообщить модератору
 Re: объединение одного столбца в строку  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7671
declare @a int = 0, @b varchar(max) = '';
select @a+=cont_of_rpm, @b+=concat(catm,' ') from tbl1;
13 дек 19, 16:00    [22039895]     Ответить | Цитировать Сообщить модератору
 Re: объединение одного столбца в строку  [new]
L_argo
Member

Откуда:
Сообщений: 1192
Я для сабжа использую функции.

select @aa = @aa+', '+MyField
.........

Работает везде и удобно кастомизировать результат.
13 дек 19, 17:59    [22040092]     Ответить | Цитировать Сообщить модератору
 Re: объединение одного столбца в строку  [new]
msLex
Member

Откуда:
Сообщений: 8000
Владислав Колосов
declare @a int = 0, @b varchar(max) = '';
select @a+=cont_of_rpm, @b+=concat(catm,' ') from tbl1;

L_argo
Я для сабжа использую функции.

select @aa = @aa+', '+MyField
.........

Работает везде и удобно кастомизировать результат.


Это
1 недокументированно
2 работает не всегда

Сообщение было отредактировано: 13 дек 19, 20:13
13 дек 19, 20:12    [22040212]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить