Tôi sẽ sử dụng cái này:
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;
Điều này sẽ nhóm vào ngày đầu tiên của mỗi tháng, vì vậy
`DATEADD(MONTH, DATEDIFF(MONTH, 0, '20130128'), 0)`
sẽ cho '20130101'
. Tôi thường thích phương pháp này vì nó giữ ngày tháng.
Ngoài ra, bạn có thể sử dụng một cái gì đó như sau:
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;
Nó thực sự phụ thuộc vào đầu ra mong muốn của bạn là gì. (Năm kết thúc không cần thiết trong ví dụ của bạn, nhưng nếu phạm vi ngày vượt qua ranh giới năm thì có thể là như vậy).