Yo usaría esto:
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;
Esto se agrupará el primero de cada mes, por lo que
`DATEADD(MONTH, DATEDIFF(MONTH, 0, '20130128'), 0)`
dará '20130101'
. Generalmente prefiero este método ya que mantiene las fechas como fechas.
Alternativamente, puede usar algo como esto:
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;
Realmente depende de cuál sea el resultado deseado. (El año de cierre no es necesario en su ejemplo, pero si el rango de fechas cruza el límite de un año, puede serlo).