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ẽ cung cấp cho '20130101'
. Tôi thường thích phương pháp này hơn vì nó giữ nguyên ngày tháng.
Ngoài ra, bạn có thể sử dụng một cái gì đó như thế này:
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ì. (Trong ví dụ của bạn không cần phải có Năm kết thúc, nhưng nếu phạm vi ngày vượt qua ranh giới của năm thì có thể là như vậy).