2016-09-22 5 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)

+0

「FOR」キーワードの後に​​ 'YEAR(INVOICE_DT) 'を付けることができますか?私はコラムだけがここに現れると思う。 'YEAR(INVOICE_DT)'にエイリアスを与え、 'FOR'の後にそのエイリアスを使います。 – qxg

+0

ああ! "エイリアスが必要です"ということを指摘してくれてありがとう...それは私が逃しているものです。私は列にエイリアスを与えて、それはトリックを動作させる! ( 'FOR'の後に' YEAR(INVOICE_DT) 'を動かすことなく)。あなたのコメントと洞察に感謝します。 – reilic

答えて

1

PIVOTオペレータはFORキーワードの後column that contains the values that will become column headersを期待..静的[2015]のオプションと[2016]、そのSQLが悪いのかわからないがあります。 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

関連する問題