Je voudrais prendre mes données brutes et les regrouper par nom, mais montrer toutes les catégories auxquelles chaque nom est associé. J'espère que l'image simplifie ce que j'essaie de faire. Est ce que quelqu'un sait comment accomplir cela? J'ai envisagé de faire un pivot, puis de combiner des colonnes, mais je me demande s'il existe un moyen plus simple et plus simple. Merci!Comment regrouper et inclure toutes les catégories
0
A
Répondre
2
Vous pouvez utiliser le FOR XML PATH
pour construire votre chaîne CSV. Le STUFF
supprime simplement la virgule principale de la liste.
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
Vous pouvez utiliser des choses et le chemin xml comme ci-dessous:
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]
Si vous utilisez SQL Server 2017 ou SQL Azure vous pouvez ensuite utiliser String_Agg comme ci-dessous
Select [Name], String_Agg(category,',') from #rawdata
group by [Name]
+0
Je vais devoir faire attention à cela. Je ne suis pas familier avec la fonction Stuff ou le chemin XML. Merci de m'avoir mis sur la bonne voie! On dirait que vous et Joe ont fourni des réponses très similaires. Je vais les regarder attentivement tous les deux. – JFrizz
Je suis va devoir franchir cela avec soin. Je ne suis pas familier avec la fonction Stuff ou le chemin XML. Merci de m'avoir mis sur la bonne voie! – JFrizz
@ Joe Stefanelli, Désolé de poser la question ci-dessous ici. Je n'ai aucune idée de la façon de gérer le scénario. Veuillez jeter un coup d'oeil. https://stackoverflow.com/questions/46285924/which-kind-of-table-design-best-suitable-for-normalization-in-sql-server. Veuillez me suggérer la meilleure solution. – RGS