如何分组并包括所有类别

How to Group and Include all Categories

我想获取我的原始数据并按名称对其进行分组,但显示每个名称关联的所有类别。希望图片简化了我正在尝试做的事情。有谁知道如何做到这一点?我考虑过做一个数据透视表然后以某种方式组合列,但我想知道是否有更直接和更简单的方法。谢谢!

您可以使用 FOR XML PATH 构建您的 CSV 字符串。 STUFF 只是从列表中删除前导逗号。

SELECT Name, Categories = STUFF((
    SELECT ', ' + Category 
        FROM dbo.YourTable
        WHERE Name = x.Name
    FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, '')
FROM dbo.YourTable AS x
GROUP BY Name;

您可以使用如下内容和 xml 路径:

Select [Name], 
    Categories = stuff((select Concat(',',category) from #rawdata r where r.[Name] = ou.[Name] for xml path('')), 1,1, '')
from #rawdata ou group by [Name] 

如果您使用的是 SQL Server 2017 或 SQL Azure,那么您可以使用 String_Agg,如下所示

Select [Name], String_Agg(category,',') from #rawdata
   group by [Name]