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