2014-05-20 4 views
1

Привет Я пытаюсь запустить приведенный ниже код, но получаю ошибку ниже. сообщая мне, что проблема связана с «+ @Cols +», однако этот код ссылается на форумы. Любая помощь будет принята с благодарностью. СпасибоDynamic pivot - не читает знак «+»

Ошибка 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

Как насчет этого?

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 переменной, то, как вы создаете это сейчас, это что-то вроде ниже (одна запись, которая является список лет):

enter image description here

Но для IN оговорки к работа, вам потребуется несколько записей, каждый год новый рекорд, как показано ниже:

Я надеюсь, что это решит вашу проблему.

+0

Спасибо, Раду, я думаю, что это намного ближе, но я все еще получаю ошибки. из выбранного отдельного имени (год) и As PVT – user3655574

+0

Msg 156, Level 15, State 1, Line 1 Неверный синтаксис рядом с ключевым словом «SELECT». Msg 102, уровень 15, состояние 1, строка 16 Неверный синтаксис рядом с ')'. – user3655574

+0

Как верхняя, так и нижняя часть шарнира отлично работает. но по какой-то причине просто эта ошибка - странная – user3655574