Concaténation dans une colonne basée sur une autre colonne

Je travaille avec SQL Server 2008.

Disons que j'ai ces trois tables:

Produit

1, "Honda Civic" 2, "Fiat Ritmo" 3, "Ford Fiesta" 

Groupe de produits

 1, 1, 1 2, 1, 2 3, 3, 1 4, 2, 3 5, 2, 4 6, 1, 5 

Groupe

 1 American 2 Asian 3 European 4 Old 5 Fast 

Et disons que je veux interroger ces tables afin d'get ce qui suit:

 "Fiat Ritmo", "European, Old" "Honda Civic", "Asian, Fast" "Ford Focus", "American" 

Comment puis-je faire ceci?

J'utilise la pagination du côté client, donc je ne peux pas regrouper les pages là-bas.

Merci de votre aide,

Barry

Utilisez la fonction FOR XML PATH pour get le regroupement de strings comme ceci:

 DECLARE @Product TABLE (Id INT PRIMARY KEY, Name NVARCHAR(100) NOT NULL) INSERT @Product VALUES(1, 'Honda Civic'), (2, 'Fiat Ritmo'), (3, 'Ford Fiesta') DECLARE @ProductGroup TABLE(Product INT, Grp INT, PRIMARY KEY(Product, Grp)) INSERT @ProductGroup VALUES (1, 1), (1, 2), (3, 1), (2, 3), (2, 4), (1, 5) DECLARE @Grp TABLE(Id INT PRIMARY KEY, NAME NVARCHAR(100)) INSERT @Grp VALUES (1, 'American'), (2, 'Asian'), (3, 'European'), (4, 'Old'), (5, 'Fast') SELECT p.name, ( SELECT Name+',' FROM @ProductGroup pg JOIN @Grp g ON pg.Grp = g.Id WHERE pg.Product = p.Id FOR XML PATH('') ) Groups FROM @Product p 

Quelque chose comme ça:

D'abord quelques données de test:

 DECLARE @Product TABLE(ID INT, Name VARCHAR(100)) INSERT INTO @Product SELECT 1,'Honda Civic' UNION ALL SELECT 2,'Fiat Ritmo' UNION ALL SELECT 3,'Ford Fiesta' DECLARE @ProductGroup TABLE(ID INT,ProductID INT, GroupID INT) INSERT INTO @ProductGroup SELECT 1, 1, 1 UNION ALL SELECT 2, 1, 2 UNION ALL SELECT 3, 3, 1 UNION ALL SELECT 4, 2, 3 UNION ALL SELECT 5, 2, 4 UNION ALL SELECT 6, 1, 5 DECLARE @Group TABLE(ID INT, Name VARCHAR(100)) INSERT INTO @Group SELECT 1, 'American' UNION ALL SELECT 2, 'Asian' UNION ALL SELECT 3, 'European' UNION ALL SELECT 4, 'Old' UNION ALL SELECT 5, 'Fast' 

Ensuite, la requête:

 SELECT Product.ID, Product.Name, STUFF ( ( SELECT ',' + Groups.Name FROM @ProductGroup AS ProductGroup JOIN @Group AS Groups ON ProductGroup.GroupID=Groups.ID WHERE ProductGroup.ProductID = Product.ID FOR XML PATH('') ),1,1,'') AS Names FROM @Product AS Product