Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Grup SQL dan Jumlahkan Berdasarkan Bulan - Default ke Nol

Di masa lalu, saya telah memecahkan masalah seperti ini dengan membuat tabel sementara yang akan menampung semua tanggal yang diperlukan:

    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

Kemudian, ubah kueri Anda untuk digabungkan dengan tabel ini:

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

Maka Anda harus memiliki catatan untuk setiap bulan, terlepas dari apakah itu ada di Inventaris.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tambahkan nilai default bidang datetime di SQL Server ke stempel waktu

  2. Jalankan Prosedur Tersimpan dari Fungsi

  3. Gunakan Pernyataan Kasus di Gabung

  4. Menyimpan dan Menganalisis Dokumen di Sistem File Windows dengan Pencarian Semantik SQL Server – Bagian 2

  5. Ekstrak Nomor Minggu dari Tanggal di SQL Server (T-SQL)