如何分组和包含所有类别

时间:2017-08-01 19:52:36

标签: sql sql-server sql-server-2016

我想获取原始数据并按名称对其进行分组,但显示与每个名称相关联的所有类别。希望这张照片简化了我想要做的事情。有谁知道如何做到这一点?我已经考虑过制作一个枢轴,然后以某种方式组合列,但我想知道是否有更直接和更简单的方法。谢谢!

enter image description here

2 个答案:

答案 0 :(得分:2)

您可以使用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;

答案 1 :(得分:1)

您可以使用stuff和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]