Calculer la colonne supplémentaire dans le groupe par

Bien sûr, cela devrait être simple, mais j'ai un problème avec le cerveau .

Dans SQL Server 2005, comment ajoutez-vous un "nombre supplémentaire" à une requête GROUP BY ?

Considérer ce qui suit…

;WITH DATA AS ( SELECT 1 AS ID, 1 AS TYPEID, 0 AS ACTIONNEEDED UNION SELECT 2 AS ID, 1 AS TYPEID, 0 AS ACTIONNEEDED UNION SELECT 3 AS ID, 2 AS TYPEID, 0 AS ACTIONNEEDED UNION SELECT 4 AS ID, 2 AS TYPEID, 1 AS ACTIONNEEDED UNION SELECT 5 AS ID, 2 AS TYPEID, 0 AS ACTIONNEEDED ) SELECT TYPEID, COUNT(*) AS TOTAL FROM DATA GROUP BY TYPEID 

Le résultat est…

 TYPEID TOTAL 1 2 2 3 

Mais j'ai besoin d'une colonne supplémentaire qui totalise le nombre de lignes où ACTIONNEEDED=1

 TYPEID TOTAL ACTIONNEEDED 1 2 0 2 3 1 

Note: malheureusement, en raison des contraintes du projet, je suis limité aux réponses compatibles SQL Server 2005

Vous pouvez utiliser SUM avec une instruction CASE interne:

 SELECT TYPEID, COUNT(*) AS TOTAL, SUM(CASE WHEN ActionNeeded = 1 THEN 1 ELSE 0 END) AS ACTIONNEEDED FROM DATA GROUP BY TYPEID