Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So gruppieren Sie nach Monat aus dem Datumsfeld mit SQL

Ich würde das verwenden:

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;

Dies wird nach dem Ersten jedes Monats gruppiert, also

`DATEADD(MONTH, DATEDIFF(MONTH, 0, '20130128'), 0)` 

ergibt '20130101' . Im Allgemeinen bevorzuge ich diese Methode, da sie Daten als Daten behält.

Alternativ könnten Sie so etwas verwenden:

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;

Es hängt wirklich davon ab, was Ihre gewünschte Ausgabe ist. (Das Abschlussjahr ist in Ihrem Beispiel nicht erforderlich, aber wenn der Datumsbereich eine Jahresgrenze überschreitet, kann dies der Fall sein).