我在 Sql Server 中有一个名为“ ITEMS_PRICE
”的视图。其中一些列是“ Name
”列和“ FormulaResult_Cost
”列。
我正在尝试做的是使用动态枢轴,将“ Name
”字段的所有行作为列,并将“”的值作为值FormulaResult_Cost
。
这是我的 SQL 查询:
DECLARE @query NVARCHAR(4000)
DECLARE @cols NVARCHAR(4000)
SELECT @cols = STUFF((SELECT distinct '' + QUOTENAME(p.Name)
from ITEMS_PRICE AS p
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') ,1,0,'')
--select STUFF(@cols, 1,0,'')
set @query = 'SELECT p.ItemCode, p.ItemName, p.ItmsGrpCod, p.ItmsGrpNam, p.Name, p.FormulaResult_Cost, ' + @cols + '
from
ITEMS_PRICE as p
pivot
(
max(p.FormulaResult_Cost)
for p.Name in (' + '[' @cols + ']' + ')
) AS t'
EXECUTE(@query)
我得到的错误是:
消息 102,级别 15,状态 1,第 29 行 '@cols' 附近的语法不正确。
另外,我不希望动态枢轴具有任何聚合函数。我刚刚在一些您必须使用的论坛上阅读,至少max()
功能是为了更正for ... in
代码。