मैं इसका उपयोग करूंगा:
SELECT Closing_Date = DATEADD(MONTH, DATEDIFF(MONTH, 0, Closing_Date), 0),
Category,
COUNT(Status) TotalCount
FROM MyTable
WHERE Closing_Date >= '2012-02-01'
AND Closing_Date <= '2012-12-31'
AND Defect_Status1 IS NOT NULL
GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, Closing_Date), 0), Category;
यह हर महीने की पहली तारीख तक समूहित हो जाएगा, इसलिए
`DATEADD(MONTH, DATEDIFF(MONTH, 0, '20130128'), 0)`
'20130101'
देगा . मैं आमतौर पर इस पद्धति को पसंद करता हूं क्योंकि यह तारीखों को तारीखों के रूप में रखता है।
वैकल्पिक रूप से आप कुछ इस तरह इस्तेमाल कर सकते हैं:
SELECT Closing_Year = DATEPART(YEAR, Closing_Date),
Closing_Month = DATEPART(MONTH, Closing_Date),
Category,
COUNT(Status) TotalCount
FROM MyTable
WHERE Closing_Date >= '2012-02-01'
AND Closing_Date <= '2012-12-31'
AND Defect_Status1 IS NOT NULL
GROUP BY DATEPART(YEAR, Closing_Date), DATEPART(MONTH, Closing_Date), Category;
यह वास्तव में निर्भर करता है कि आपका वांछित आउटपुट क्या है। (आपके उदाहरण में समाप्ति वर्ष आवश्यक नहीं है, लेकिन यदि दिनांक सीमा एक वर्ष की सीमा को पार कर जाती है तो यह हो सकता है)।