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