我正在尝试在SQL Server中执行以下操作:
SELECT
PRODUCER_NAME, PRODUCER_ID,
(SELECT @X = @X + PRODUCT_NAME
FROM PRODUCT
WHERE PRODUCER_ID = PRODUCER.ID)
FROM
PRODUCER
有两张桌子。 Producer
表是所有生产者的列表。 Product
表存储生产者生产的产品。 @x
是varchar
变量
基本上我想要一个所有产品的列表,由生产者以逗号分隔。
例如
Producer Products
-------- --------------------------
P1 ProductA,ProductB,ProductC
P2 ProductD,ProductE
我不知道这是否可行。如果没有加入桌子,有谁知道怎么做?
答案 0 :(得分:7)
我没有办法让你将多个输出逗号分隔的列表分配给单个varchar变量,但也许你实际上并不需要它。试试这个:
SELECT
Producer = p.PRODUCER_NAME,
Products = STUFF((
SELECT ',' + pr.PRODUCT_NAME
FROM dbo.PRODUCT AS pr
WHERE pr.PRODUCER_ID = p.PRODUCER_ID
FOR XML PATH('')).value('.[1]','nvarchar(max)'),1,1,'')
FROM dbo.PRODUCER AS p;
答案 1 :(得分:1)
如果要连接名称,可以执行以下操作:
select
P.PRODUCER_NAME, P.PRODUCER_ID,
stuff(
(
select ',' + T.PRODUCT_NAME
from PRODUCT as T
where T.PRODUCER_ID = P.PRODUCER_ID
for xml path(''), type
).value('.', 'nvarchar(max)')
, 1, 1, '') as PRODUCT_NAMES
from PRODUCER as P
两个注释:
value
方法而不是隐式转换为nvarchar,以正确使用“Product&”等名称。 1' 。