2017-09-21 4 views
1

Ich habe eine Tabelle in SQL, die Rechnungsdaten enthält. Die einzigen 2 Spalten, die mir wichtig sind, sind Betrag und Datum. Ich habe mehrere tausend Zeilen über mehrere JahreGruppensumme Summe nach Jahr und Monat

Zum Beispiel

19.32  2017-01-01 03:28:37.787 

Meine Frage wie diese jedoch

SELECT * FROM (
    SELECT 
    YEAR(CreatedUtc) AS [Year], 
    MONTH(CreatedUtc) AS [Month], 
    DATENAME(MONTH, CreatedUtc) AS [Month Name], 
    SUM(InvoiceTotal) as [InvoiceTotal] 
    FROM [dbo].[Invoice] 
    GROUP BY YEAR(CreatedUtc), MONTH(CreatedUtc), DATENAME(MONTH,CreatedUtc) 
) AS t 

PIVOT (
    SUM(InvoiceTotal) 
    FOR [Month Name] IN ([January],[February],[March],[April],[May], 
    [June],[July],[August],[September],[October],[November], 
    [December])) AS MNamePivot 
ORDER BY 1,2 

sieht, meine Ergebnisse sind in der Nähe, aber nicht genau das, was ich suche. Wie kann ich alle 12 Monate für jedes Jahr in einer einzigen Zeile bekommen?

Year Month January February March April May June July August September October November December 

2013 10 NULL NULL NULL NULL NULL NULL NULL NULL NULL 3803.15 NULL NULL 

2013 11 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 4039.90 NULL 

2013 12 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 4498.70 

2014 1 27139.45 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 

2014 2 NULL 28164.61 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 

2014 3 NULL NULL 29185.82 NULL NULL NULL NULL NULL NULL NULL NULL NULL 

2014 4 NULL NULL NULL 29933.51 NULL NULL NULL NULL NULL NULL NULL NULL 

2014 5 NULL NULL NULL NULL 30470.01 NULL NULL NULL NULL NULL NULL NULL 

2014 6 NULL NULL NULL NULL NULL0.82 NULL NULL NULL NULL NULL NULL 
+3

Wenn Sie nur zwei Spalten interessiert, warum wählen Sie alle? ('SELECT * FROM ...') –

+1

Ich wollte sagen, dass mir nur die 2 Spalten aus der Rechnungstabelle wichtig sind. Entschuldigung, war nicht klar. – JCircio

+0

@peterh danke für die Bearbeitung. Würde es lieben zu wissen, wie du das gemacht hast? – JCircio

Antwort

0

einfach die MONTH(CreatedUtc) AS [Month] von SELECT und GROUP BY um Gruppe allein durch Jahr entfernen. Und in der Tat, Gruppierung von Monat ist überflüssig, da Sie in Spalten durch ihn drehen.

SELECT * FROM (
    SELECT 
    YEAR(CreatedUtc) AS [Year], 
    MONTH(CreatedUtc) AS [Month], 
    DATENAME(MONTH, CreatedUtc) AS [Month Name], 
    SUM(InvoiceTotal) as [InvoiceTotal] 
    FROM [dbo].[Invoice] 
    GROUP BY YEAR(CreatedUtc), DATENAME(MONTH,CreatedUtc) 
) AS t 

PIVOT (
    SUM(InvoiceTotal) 
    FOR [Month Name] IN ([January],[February],[March],[April],[May], 
    [June],[July],[August],[September],[October],[November], 
    [December])) AS MNamePivot 
ORDER BY 1,2 

Siehe Rextester demo mit zufälligen Daten.