2016-11-20 4 views
0

Ich schreibe eine SQL-Abfragen mit AdventureWorks2014 und ich habe eine, die Bestelldaten dauert und schneidet es in Tage, Monate, Tage der Woche und so weiter. Wenn ich eine Abfrage verwende, die alle Monate nacheinander mit der Anzahl der in diesem gegebenen Zeitraum getätigten Bestellungen auflistet, ignoriert sie den Monat, in dem keine Bestellung getätigt wurde. Ich hätte gerne einen Monat mit 0 Bestellungen, aber ich habe keine Ahnung, wie ich das ändern soll.Liste Monate mit Bestellnummer, AdventureWorks2014

Hier sind meine Fragen:

SELECT DISTINCT 
    a.SalesOrderID, 
    CONCAT(DATEPART(yyyy,OrderDate), RIGHT('00' + CONVERT(NVARCHAR(2), DATEPART(MONTH, OrderDate)), 2), RIGHT('00' + CONVERT(NVARCHAR(2), DATEPART(DAY, OrderDate)), 2)) AS TimeID, 
    DAY(OrderDate) AS Day, 
    DATEPART(WEEKDAY, OrderDate) AS 'DayOfWeek', 
    DATENAME(WEEKDAY, OrderDate) AS 'DayOfWeek Name', 
    MONTH(OrderDate) AS MONTH, 
    DATENAME(Month, OrderDate) AS 'Month Name', 
    DATEPART(QUARTER, OrderDate) as 'Quarter', 
    YEAR(orderDate) AS YEAR 
INTO 
    [DW].[DIMTime] 
FROM 
    [AdventureWorks2014].[Sales].[SalesOrderHeader] a; 

SELECT 
    MONTH, year, COUNT(SalesOrderID) 
FROM 
    [DW].DIMTime 
GROUP BY 
    MONTH, Year 
ORDER BY 
    Year, Month 

Ich hoffe, dass ihr mir helfen könntet! Vielen Dank im Voraus

Antwort

1

Erstellen Sie eine Tabelle mit allen möglichen Kombinationen von Jahr und Monat, und verwenden Sie einen OUTER JOIN, um diese Tabelle zu Ihrer DW.DIMTime-Tabelle beizutreten, wobei alle Monate und Jahre aus Ihrer Monatslistentabelle beibehalten werden.