Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Grupa SQL i suma według miesiąca — domyślnie zero

W przeszłości rozwiązałem taki problem, tworząc tabelę tymczasową, w której będą przechowywane wszystkie potrzebne daty:

    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

Następnie zmodyfikuj zapytanie, aby dołączyć do tej tabeli:

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

Następnie powinieneś mieć zapis dla każdego miesiąca, niezależnie od tego, czy istnieje w ekwipunku.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Szybki skrypt, który zwraca wszystkie właściwości z SERVERPROPERTY() w SQL Server 2017/2019

  2. Czy można połączyć funkcję o wartościach z tabeli i inną tabelę z parametrami?

  3. Podczas gdy pętla w SQL Server 2008 iteruje przez zakres dat, a następnie INSERT

  4. Kontrola źródła i procedury składowane

  5. Jak przeszukać bazę danych SQL Server w poszukiwaniu ciągu?