您好我正在尝试运行以下代码,但收到以下错误。告诉我这个问题是由于' + @Cols +',但此代码是从论坛引用的。任何帮助将不胜感激。感谢
错误 Msg 102,Level 15,State 1,Line 27 '附近的语法不正确+ @Cols +'。
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(year)
FROM [Reporting].[dbo].[FX_Table]
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SELECT *
FROM
(
SELECT
[from],
[Year],
[FX]
FROM [Reporting].[dbo].[FX_Table] WHERE [To] = 'Euro'
GROUP BY
[from],
[Year],
[FX]
) AS S
PIVOT
(
SUM(FX)
FOR [year] IN ' + @Cols + '
)
AS PVT
答案 0 :(得分:0)
这个怎么样?
SELECT *
FROM (
SELECT [from],
[Year],
[FX]
FROM [Reporting].[dbo].[FX_Table]
WHERE [To] = 'Euro'
GROUP BY [from],
[Year],
[FX]
) AS S
PIVOT(SUM(FX) FOR [year] IN (
SELECT DISTINCT year
FROM [Reporting].[dbo].[FX_Table]
)) AS PVT
您不必创建变量,您将存储所有值,然后尝试使用IN
来检查这些值并过滤它们。
另外,如果你创建一个NVARCHAR
变量来保存你的所有年份,那么你将不得不用逗号分割所有这些值,以便将它们与IN
一起使用(这将使你的声明变量@Cols
无用)。
您在@Cols
变量中的内容,就像您现在创建它的方式一样,如下所示(一条记录是年份列表):
但是要使你的IN
条款起作用,你需要多条记录,每年都有一条新记录,如下所示:
我希望这能解决你的问题。