2016-09-22 4 views
0

Я пытаюсь сделать pivot в T-SQL, который возвращает SUM(INVOICE_AMOUNT) для 2015 и 2016 для каждого CUST_ID.Pivot in T-SQL бросает синтаксическую ошибку

Но SQL я использую выдает ошибку:

Incorrect syntax near '('

и я не могу определить ошибку синтаксиса. Может ли кто-нибудь сообщить, что с ним не так?

SELECT 
    H.CUST_ID, [2015], [2016] 
FROM 
    (SELECT 
     H.INVOICE_AMOUNT, YEAR(H.INVOICE_DT) 
    FROM 
     BILLING_HEADER H) p 
PIVOT 
    SUM(H.INVOICE_AMOUNT) FOR YEAR(INVOICE_DT) IN ([2015], [2016])) AS pvt 

Year(INVOICE_AMOUNT) имеет статический вариант [2015] и [2016], так что не уверен, что случилось с SQL ..

+0

Можете ли вы поместить слово 'YEAR (INVOICE_DT)' после · 'FOR'? Я думаю, что здесь может появиться только столбец. Дайте 'YEAR (INVOICE_DT)' псевдоним и используйте этот псевдоним после 'FOR'. – qxg

+0

О! Спасибо, что указали, что «ему нужен псевдоним» ... Вот чего мне не хватает. Я дал псевдоним столбцам, и это работает трюк! (без перемещения 'YEAR (INVOICE_DT)' после 'FOR'.) Спасибо за ваш комментарий и прозрение. – reilic

ответ

1

PIVOT оператор ожидает column that contains the values that will become column headers после FOR ключевого слова. Дайте YEAR(INVOICE_DT) псевдоним и использовать этот псевдоним после FOR

SELECT H.CUST_ID, [2015], [2016] 
FROM 
(
    SELECT H.INVOICE_AMOUNT, YEAR(H.INVOICE_DT) AS INVOICE_YEAR 
    FROM BILLING_HEADER H 
) p 
PIVOT 
    SUM(H.INVOICE_AMOUNT) 
    FOR INVOICE_YEAR in ([2015],[2016]) 
) as pvt 

По существу, оператор PIVOT выполнить GROUP BY операцию, и он догадывается, какой столбец должен быть введен в GROUP BY пункта путем удаления столбцов, используемых в PIVOT оператора из столбца исходной таблицы. Такое предположение не работает с функцией. См. Небольшую информацию по адресу TSQL - Looking for code clarification

Смежные вопросы