【发布时间】:2015-11-10 02:43:11
【问题描述】:
DECLARE @FirstDayOfWeek DATETIME
SELECT @FirstDayOfWeek =
COALESCE(
cast(@FirstDayOfWeek AS VARCHAR(MAX)) + ',[' + cast(@FirstDayOfWeek AS VARCHAR(MAX)) + ']',
'[' + cast(@FirstDayOfWeek AS VARCHAR(MAX))+ ']'
)
FROM [Calendar] c
LEFT JOIN Stores s ON c.FirstDayOfMonth = s.Validfrom
left join POSProductDivPeriod pos ON c.Period = pos.Period
DECLARE @PivotTableSQL NVARCHAR(MAX)
SET @PivotTableSQL = N'
SELECT *
FROM (
SELECT
YEAR(FirstDayOfWeek) [Year],
@FirstDayOfWeek,
pos.quantity
FROM [Calendar] c
LEFT JOIN Stores s ON c.FirstDayOfMonth = s.Validfrom
left join POSProductDivPeriod pos ON c.Period = pos.Period
) AS PivotData
PIVOT (
SUM(pos.quantity)
FOR @FirstDayOfWeek IN (
' +CAST(@FirstDayOfWeek AS VARCHAR(MAX)) + '
)
) AS PivotTable
'
EXECUTE(@PivotTableSQL)
当我运行所有这些时,我得到命令完成 当我运行执行时,我必须声明 Scarlar 我试图为我的数据透视表运行我的代码,并在
之后立即执行有什么想法吗?
【问题讨论】:
-
问题很明显,您正在尝试在动态 sql 中使用变量
@FirstDayOfWeek,动态 sql 有自己的范围,并且在其范围之外声明的任何变量对动态 sql 都不可见。@FirstDayOfWeek需要连接到动态sql。 -
当您执行 PRINT @PivotTableSQL 时它会说什么?
标签: sql-server dynamic pivot-table