[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