[SQL ] pivot欄位自動產生

作者: tsongs (......)   2019-04-29 10:28:15
資料庫名稱: MSSQL
資料庫版本: 2008R2
內容/問題描述:
我想要寫一個報表固定最近5年客戶的總業績
因為每年會變動,我不想寫[2015],[2016],[2017],[2018],[2019]
以下 PIVOT 年度那邊一直出現錯誤,麻煩協助看一下錯在哪
declare @y4 varchar(4),@YearGroup varchar(100)
set @y4 = cast(year(getdate())-4 as varchar(4))
select @YearGroup = COALESCE(@YearGroup+',','')+QUOTENAME(年度)
FROM 客戶業績 Where 年度 >= @y4
group by QUOTENAME(年度)
order by QUOTENAME(年度)
declare @SQL nvarchar(max)
SET @SQL = N'SELECT *
FROM (SELECT [年度], [客戶編號], [簡稱], [總金額]
FROM 客戶業績
WHERE 年度 >= cast(year(getdate()) - 4 AS varchar)) T
PIVOT (SUM(總金額) FOR 年度 IN (' + @YearGroup + ') ) as P'
EXEC @SQL
執行錯誤是
名稱 'SELECT *
FROM (SELECT [年度], [客戶編號], [簡稱], [總金額]
FROM 客戶業績
WHERE 年度 >= cast(year(getdate()) - 4 AS varchar)) T
PIVOT (SUM(總金額) FOR 年度 IN ([2015],[2016],[2017],[2018],[2019]) )
as P' 不是有效的識別碼。
可是把錯誤那一段直接執行是OK的
麻煩協助看下哪邊有錯
PS: 試過 (' + @YearGroup + N') 一樣不行
如果不使用 EXEC @SQL
會顯示
""' + @YearGroup + ' " 附近的語法不正確,必須是'.',ID,或QUOTE_ID.
作者: funk6478 (大恩)   2019-05-01 10:17:00
最後一句改成 EXEC sp_executesql @SQL
作者: Catbert (宅男)   2019-04-29 22:33:00

Links booklink

Contact Us: admin [ a t ] ucptt.com