作者tsongs (......)
看板Database
标题[SQL ] pivot栏位自动产生
时间Mon Apr 29 10:28:15 2019
资料库名称: 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.
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 125.227.65.181
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1556504897.A.264.html
※ 编辑: tsongs (125.227.65.181), 04/29/2019 11:05:51
2F:推 funk6478: 最後一句改成 EXEC sp_executesql @SQL 05/01 10:17
感谢2位
我在很多地方放 N' 一直没解决
终於用funk6478的方法解决了
※ 编辑: tsongs (125.227.65.181), 05/03/2019 08:43:06