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;