将 SQL 行值连接到汇总字段中

Concatenating SQL row values into a summary field

我有可以同时属于多个组的客户。我需要按字母顺序从不同的组中创建超级组。

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 服务器版本中不可用(我使用的是 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. 枢轴 根据我的阅读,它似乎只处理数字,它是我需要聚合的字符串。

您可以尝试使用正确的 FOR XML PATHDISTINCT 子查询。

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