sql >> Databáze >  >> RDS >> Sqlserver

Skupina SQL a součet podle měsíce – výchozí hodnota je nula

V minulosti jsem podobný problém vyřešil vytvořením dočasné tabulky, která bude obsahovat všechna potřebná data:

    CREATE TABLE #AllDates (ThisDate datetime null)
    SET @CurrentDate = @StartRange

    -- insert all dates into temp table
    WHILE @CurrentDate <=  @EndRange
        BEGIN
            INSERT INTO #AllDates values(@CurrentDate)
            SET @CurrentDate = dateadd(mm, 1, @CurrentDate)
        END

Potom upravte svůj dotaz tak, aby se připojil k této tabulce:

SELECT      ALLItems.ItemId,
            SUM(COALESCE(Inventory.Qty, 0)) AS Individual_MonthQty,
            MONTH(#AllDates.ThisDate) AS Individual_MonthAsNumber,
            DATENAME(MONTH, #AllDates.ThisDate) AS Individual_MonthAsString
FROM        #AllDates
            JOIN (SELECT DISTINCT dbo.Inventory.ItemId FROM dbo.Inventory)  AS ALLItems ON 1 = 1
            LEFT JOIN Inventory ON DATEADD(dd, - DAY(Inventory.dadded) +1, Inventory.dadded) = #AllDates.ThisDate AND ALLItems.ItemId = dbo.Inventory.ItemId
WHERE       
            #AllDates.ThisDate >= @StartRange
AND         #AllDates.ThisDate <= @EndRange
GROUP BY    ALLItems.ItemId, 
            #AllDates.ThisDate

Pak byste měli mít záznam pro každý měsíc bez ohledu na to, zda existuje v Inventáři.



  1. PHP a MySQL - Jak zobrazit vybranou hodnotu v rozbalovací nabídce

  2. Lepší pochopení problémů SQLalchemy s `yield_per()`

  3. Vyberte neduplicitní záznamy ve sloupci tabulky MySQL

  4. Výchozí uživatelské jméno a heslo pro databázi Oracle