2016-09-22 1 views
0

Ich versuche, einen Pivot in T-SQL, die SUM(INVOICE_AMOUNT) für 2015 und 2016 für jeden CUST_ID zurückgeben.Pivot in T-SQL löst Syntaxfehler

Aber die SQL ich benutze wirft einen Fehler:

Incorrect syntax near '('

und ich kann den Syntaxfehler nicht erkennen. Könnte jemand raten, was damit nicht stimmt?

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 

Die Year(INVOICE_AMOUNT) hat statische Möglichkeit, [2015] und [2016], so sicher nicht, was mit dem SQL falsch ..

+0

Können Sie 'YEAR (INVOICE_DT)' nach · 'FOR' Schlüsselwort? Ich denke nur Spalte kann hier erscheinen. Geben Sie 'YEAR (INVOICE_DT)' einen Alias ​​und verwenden Sie diesen Alias ​​nach 'FOR'. – qxg

+0

Oh! Danke für den Hinweis "es braucht einen Alias" ... Das fehlt mir. Ich habe den Spalten Alias ​​gegeben und es funktioniert der Trick! (ohne 'YEAR (INVOICE_DT)' nach dem 'FOR' zu verschieben.) Danke für deinen Kommentar und deine Einsicht. – reilic

Antwort

1

PIVOT Betreiber erwartet column that contains the values that will become column headers nach FOR Stichwort. Geben Sie YEAR(INVOICE_DT) einen Aliasnamen und verwenden Sie diesen alias nach 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 

Im Wesentlichen führt PIVOT-Operator einen GROUP BY Betrieb, und es Vermutungen, welche Spalte GROUP BY Klausel setzt in durch Entfernen werden Spalten in PIVOT Operator aus Quelltabellenspalte verwendet werden soll. Solch eine Schätzung funktioniert nicht mit der Funktion. Sehen Sie ein paar Informationen unter TSQL - Looking for code clarification