0

我有一张叫桌子Products和一张叫的桌子Colors

两个表中都有一个 FK productId

Color表如下所示:

colorId | productId | color
---------------------------
1       | 10        | Red
2       | 10        | Yellow
3       | 10        | Green

我如何进行连接以productId = 10使用逗号分隔符在单行中获取与所有颜色相关联的所有颜色?

我的意思是结果应该是这样的:

prodId | ProdName  | Colors 
-----------------------------
10     |Man t-Short|Red, Green,Yellow

谢谢

4

1 回答 1

1

您可以使用FOR XML PATH将值连接到单个列中:

select distinct p.prodid, p.prodname,
  STUFF((SELECT distinct ', ' + c.color
         from Colors c
         where p.prodId = c.productid
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,2,'') colors
from products p;

请参阅SQL Fiddle with Demo

或者您可以CROSS APPLY使用FOR XML PATH

select p.prodid, 
  p.prodname,
  left(colors, len(colors)-1) colors
from products p
cross apply
(
  select c.color + ', '
  from colors c
  where p.prodid = c.productid
  for xml path('')
) c (colors);  

请参阅带有演示的 SQL Fiddle

于 2013-03-31T20:18:26.147 回答