将 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
我试过的
STRING_AGG
STRING_AGG - 在我的 SQL 服务器版本中不可用(我使用的是 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
我有可以同时属于多个组的客户。我需要按字母顺序从不同的组中创建超级组。
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 服务器版本中不可用(我使用的是 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