इस समाधान के लिए आपको उन महीनों की सूची को हार्ड-कोड करने की आवश्यकता नहीं है जो आप चाहते हैं, आपको बस इतना करना है कि कोई भी प्रारंभ तिथि और कोई समाप्ति तिथि प्रदान करें, और यह आपके लिए महीने की सीमाओं की गणना करेगा। इसमें आउटपुट में वर्ष शामिल है ताकि यह 12 महीनों से अधिक का समर्थन करे और ताकि आपकी शुरुआत और समाप्ति तिथियां एक वर्ष की सीमा को पार कर सकें और फिर भी सही ढंग से ऑर्डर कर सकें और सही महीना दिखा सकें और वर्ष।
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;