У меня есть клиенты, которые могут принадлежать ко многим группам одновременно. Мне нужно создать супергруппы из отдельных групп в алфавитном порядке.
Cust_ID|Group
1 |Group 4
1 |Group 6
1 |Group 6
1 |Group 6
1 |Group 5
2 |Group 3
2 |Group 1
2 |Group 3
Желаемый результат
Cust_ID|Supergroup
1 |Group 4, Group 5, Group 6
2 |Group 1, Group 3
Что я пробовал
STRING_AGG STRING_AGG — недоступно в моей версии SQL Server (я использую 2016)
ДЛЯ XML-ПУТИ Это немного хакерски, но мне удалось получить конкатенацию всех записей в одном поле.
Select SUBSTRING(
(
SELECT top 15 PolicyOwner1_CISKey, ',' + clientGroup AS 'data()'
FROM IND_IN_SCOPE FOR XML PATH('') ), 2 , 9999) As Groups
ВРАЩАТЬСЯ Судя по моему чтению, он обрабатывает только числа, это строки, которые мне нужно агрегировать.
Вы можете попробовать использовать правильный подзапрос FOR XML PATH
и DISTINCT
.
SELECT
[Cust_ID],
STUFF((
SELECT DISTINCT ', ' + [Group]
FROM IND_IN_SCOPE
WHERE (Cust_ID = t1.Cust_ID)
FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
,1,2,'') AS Supergroup
FROM IND_IN_SCOPE t1
GROUP BY Cust_ID
Потрошитель! Прекрасно работает.