2016-09-22 40 views
0

我正在嘗試在T-SQL中執行一個數據透視表,其中每個CUST_ID都會返回2015年和2016年的SUM(INVOICE_AMOUNT)在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

哦!感謝您指出「它需要一個別名」......這就是我所缺少的。我已經給了列的別名,它的作品伎倆! (在'FOR'之後沒有移動'YEAR(INVOICE_DT)')。感謝您的評論和見解。 – reilic

回答

1

PIVOT操作後FOR關鍵字預計column that contains the values that will become column headers。給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操作,並且它會猜測哪一列應當由在從源表列PIVOT操作員正在使用的列除去投入GROUP BY子句。這種猜測不適用於功能。看到一些信息在TSQL - Looking for code clarification