Fügen Sie fehlende Monate in datasatz hinzu

Könnten Sie mir bitte helfen, Ergebnisse zu generieren, wie unten?

Ich habe ein Ergebnis gesetzt, aber in meinen data haben nur wenige Monate keine data und so also keine Monate im Re-Cord-Set angezeigt, aber ich möchte alle jene Monate anzeigen, in denen es keine data gibt.

Bitte sehen Sie das beigefügte image und ich habe auch das Ergebnis-Skript beigefügt.

Bildbeschreibung hier eingeben

Create Table #TempTbl( [Year] int, [Month] int, LostQty int, WonQty int, LostValue int, WonValue int, ) GO INSERT INTO #TempTbl VALUES (2015, 3, 13, 6, 3000,4500), (2015, 4, 1, 1, 4000, 200), (2015, 5, 0, 1, 0, 200), (2015, 6, 4, 6, 5000, 3000), (2015, 7, 1, 2, 3500, 1100), (2015, 8, 1, 1, 2000, 900), (2015, 9, 5, 0, 2500, 0), (2015, 10, 6, 3, 4500, 800), (2015, 11, 0, 1, 0, 7400), (2015, 12, 1, 0, 2200, 0), (2016, 1, 3, 5, 2200, 200), (2016, 2, 0, 1, 0, 1500), (2016, 3, 1, 0, 2300, 0), (2016, 4, 1, 0, 3500, 0), (2016, 9, 4, 1, 1500, 1400), (2016, 10, 16, 4, 1700, 3000), (2016, 11, 5, 5, 500, 400), (2016, 12, 6, 0, 600, 0) 

Wie in den Kommentaren erwähnt, ist eine permanente Kalender-Tabelle sehr hilfreich für viele verschiedene Aufgaben, aber es gibt timeen, wenn das Hinzufügen neuer objecte einfach nicht möglich ist. In dieser Situation ist es ganz einfach, eine auf der Fliege zu build.

Anmerkung … In dieser Lösung habe ich die Basistabelle benutzt, um die Jahre abzufragen, aber es ist nicht notwendig (oder sogar wünschenswert), dies zu tun … Nur etwas im Auge zu behalten …

 WITH cte_Calendar AS ( SELECT DISTINCT tt.[year], m.[Month] FROM #TempTbl tt CROSS APPLY ( VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12) ) m ([Month]) ) SELECT c.[Year], c.[Month], tt.LostQty, tt.WonQty, tt.LostValue, tt.WonValue FROM #TempTbl tt FULL JOIN cte_Calendar c ON tt.[Year] = c.[Year] AND tt.[Month] = c.[Month] ORDER BY c.[Year], c.[Month]; 

Und die Ergebnisse …

 Year Month LostQty WonQty LostValue WonValue ----------- ----------- ----------- ----------- ----------- ----------- 2015 1 NULL NULL NULL NULL 2015 2 NULL NULL NULL NULL 2015 3 13 6 3000 4500 2015 3 13 6 3000 4500 2015 4 1 1 4000 200 2015 4 1 1 4000 200 2015 5 0 1 0 200 2015 5 0 1 0 200 2015 6 4 6 5000 3000 2015 6 4 6 5000 3000 2015 7 1 2 3500 1100 2015 7 1 2 3500 1100 2015 8 1 1 2000 900 2015 8 1 1 2000 900 2015 9 5 0 2500 0 2015 9 5 0 2500 0 2015 10 6 3 4500 800 2015 10 6 3 4500 800 2015 11 0 1 0 7400 2015 11 0 1 0 7400 2015 12 1 0 2200 0 2015 12 1 0 2200 0 2016 1 3 5 2200 200 2016 1 3 5 2200 200 2016 2 0 1 0 1500 2016 2 0 1 0 1500 2016 3 1 0 2300 0 2016 3 1 0 2300 0 2016 4 1 0 3500 0 2016 4 1 0 3500 0 2016 5 NULL NULL NULL NULL 2016 6 NULL NULL NULL NULL 2016 7 NULL NULL NULL NULL 2016 8 NULL NULL NULL NULL 2016 9 4 1 1500 1400 2016 9 4 1 1500 1400 2016 10 16 4 1700 3000 2016 10 16 4 1700 3000 2016 11 5 5 500 400 2016 11 5 5 500 400 2016 12 6 0 600 0 2016 12 6 0 600 0