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

Sertakan bulan yang hilang dalam kueri Grup Berdasarkan

Solusi ini tidak mengharuskan Anda untuk membuat kode keras daftar bulan yang mungkin Anda inginkan, yang perlu Anda lakukan hanyalah memberikan tanggal mulai dan tanggal akhir apa pun, dan itu akan menghitung batas bulan untuk Anda. Ini termasuk tahun dalam output sehingga akan mendukung lebih dari 12 bulan dan agar tanggal mulai dan berakhir Anda dapat melewati batas tahun dan masih memesan dengan benar dan menunjukkan bulan yang benar dan tahun.

DECLARE @StartDate SMALLDATETIME, @EndDate SMALLDATETIME;

SELECT @StartDate = '20120101', @EndDate = '20120630';

;WITH d(d) AS 
(
  SELECT DATEADD(MONTH, n, DATEADD(MONTH, DATEDIFF(MONTH, 0, @StartDate), 0))
  FROM ( SELECT TOP (DATEDIFF(MONTH, @StartDate, @EndDate) + 1) 
    n = ROW_NUMBER() OVER (ORDER BY [object_id]) - 1
    FROM sys.all_objects ORDER BY [object_id] ) AS n
)
SELECT 
  [Month]    = DATENAME(MONTH, d.d), 
  [Year]     = YEAR(d.d), 
  OrderCount = COUNT(o.OrderNumber) 
FROM d LEFT OUTER JOIN dbo.OrderTable AS o
  ON o.OrderDate >= d.d
  AND o.OrderDate < DATEADD(MONTH, 1, d.d)
GROUP BY d.d
ORDER BY d.d;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pemotongan SQL Server dan batasan 8192

  2. COUNT() vs COUNT_BIG() di SQL Server:Apa Bedanya?

  3. SQL pilih semua jika parameternya nol, jika tidak, kembalikan item tertentu

  4. Periksa apakah string berisi substring di SQL Server 2005, menggunakan prosedur tersimpan

  5. Dapatkan Bagian Kanan dari sebuah String di SQL Server (T-SQL)