如何分组和包括所有类别

问题描述:

我想采取我的原始数据并按名称分组,但显示每个名称与相关联的所有类别。希望这张照片可以简化我想要做的事情。有谁知道如何做到这一点?我曾考虑制作一个数据透视表,然后以某种方式合并列,但我想知道是否有更直接更简单的方法。谢谢!如何分组和包括所有类别

enter image description here

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

我将不得不经过仔细的步骤。我不熟悉Stuff函数或XML路径。感谢您让我走上正轨! – JFrizz

+0

@Joe Stefanelli,对不起,在这里问下面的问题。我不知道如何处理这种情况。请看看。 https://*.com/questions/46285924/which-kind-of-table-design-best-suitable-for-normalization-in-sql-server。请提出更好的解决方案。 – RGS

您可以使用的东西,如下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] 
+0

我将不得不经过仔细的步骤。我不熟悉Stuff函数或XML路径。感谢您让我走上正轨!看起来你和乔提供了非常相似的答案。我会仔细看看他们两个。 – JFrizz