Объединение значений строки SQL в поле сводки

У меня есть клиенты, которые могут принадлежать ко многим группам одновременно. Мне нужно создать супергруппы из отдельных групп в алфавитном порядке.

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

Что я пробовал

  1. STRING_AGG STRING_AGG — недоступно в моей версии SQL Server (я использую 2016)

  2. ДЛЯ XML-ПУТИ Это немного хакерски, но мне удалось получить конкатенацию всех записей в одном поле.

    Select SUBSTRING( 
    ( 
         SELECT top 15 PolicyOwner1_CISKey, ',' + clientGroup AS 'data()'
             FROM IND_IN_SCOPE FOR XML PATH('') ), 2 , 9999) As Groups
    
  3. ВРАЩАТЬСЯ Судя по моему чтению, он обрабатывает только числа, это строки, которые мне нужно агрегировать.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете попробовать использовать правильный подзапрос 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

sqlfiddle

Потрошитель! Прекрасно работает.

Nimbocrux 05.04.2022 00:18

Другие вопросы по теме