【发布时间】:2017-03-13 16:37:57
【问题描述】:
我有以下 SQL 查询
Select Product_Id, [riy] AS [riy],
[eas] AS [eas]
FROM
(SELECT Product_Id, Store_Name, Quantity
FROM [Product_Stock] INNER JOIN Store on Store.Id = [Product_Stock].Stock_Id where Product_Id = 435) ps
PIVOT
(
SUM(Quantity)
FOR Store_Name IN
([riy],[EAST WAREHOUSE - eas])
) AS pvt
它给出了预期的结果。给了我位置 riy 和 eas 的总数量。
但是,我想动态获取商店名称,而不是手动指定它们。
这就是我所做的。
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT ',' + QUOTENAME([Product_Id])
FROM [Product_Stock]
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SELECT @query =
'SELECT Product_Id FROM
(SELECT Product_Id, Store_Name, Quantity
FROM [Product_Stock] INNER JOIN Store on Store.Id = [Product_Stock].Stock_Id where Product_Id = 435) PS
PIVOT
(
SUM(Quantity)
FOR Store_Name in (' + @cols + ')
) AS PVT'
EXEC SP_EXECUTESQL @query
这给了我一个错误提示 为“PVT”多次指定了“638”列。
我该如何解决这个问题?
【问题讨论】:
标签: sql sql-server-2008 tsql pivot-table crosstab