Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment regrouper par mois à partir du champ Date en utilisant sql

J'utiliserais ceci :

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;

Cela se groupera par le premier de chaque mois, donc

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

donnera '20130101' . Je préfère généralement cette méthode car elle conserve les dates comme des dates.

Vous pouvez également utiliser quelque chose comme ceci :

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;

Cela dépend vraiment de la sortie souhaitée. (L'année de clôture n'est pas nécessaire dans votre exemple, mais si la plage de dates traverse une limite d'année, cela peut l'être).