Select p.ProductID,
Stuff((Select ','+Cast(ImageID as varchar(10))
From @ProductImages i
Where p.ProductID=i.ProductId
For XML PATH('')
),1,1,''
) as ImageList
From @Products p
Where p.ProductID in (Select ProductID From @ProductImages)
Voici les données de test j'ai utilisé pour cette requête
Declare @Products Table (ProductID int primary key, ProductName varchar(20))
Declare @ProductImages Table (ProductId int, ImageId int, Primary Key (ProductId, ImageId))
Insert Into @Products
Select 1, 'Product1' Union all
Select 2, 'Product1' Union all
Select 3, 'Product1' Union all
Select 4, 'Product1' Union all
Select 5, 'Product1'
Insert Into @ProductImages
Select 1,1 Union all
Select 1,2 Union all
Select 1,3 Union all
Select 2,4 Union all
Select 2,5 Union all
Select 3,1 Union all
Select 4,3 Union all
Select 4,5
Et voici la suite de la requête:
ProductID ImageList
--------- ---------
1 1,2,3
2 4,5
3 1
4 3,5
Si vous voulez avoir ProductID 5 dans la liste avec null pour Liste d'images, il suffit de retirer la ligne suivante de la requête:
Where p.ProductID in (Select ProductID From @ProductImages)
Vous aurez une ligne supplémentaire dans le résultat (il ne dispose pas d'images attribuées):
5 null
en double de http://stackoverflow.com/questions/111341/combine-multiple-results-in-a- sous-requête en une seule valeur séparée par une virgule? Quoi qu'il en soit, ce fil a la réponse que vous cherchez –
duplication possible de [Comment créer une liste séparée par des virgules en utilisant une requête SQL?] (Http://stackoverflow.com/questions/1817985/how-do-i -create-a-separated-list-using-a-sql-query) –