2017-03-09 1 views
1

J'ai fait une requête, mais il ne me donne pas ce que je veux:Comment utiliser cas Lorsqu'avec Grouper par déclaration

SELECT  Designation_projet, COUNT(*) AS [Nb Demande], CASE WHEN Validation = 0 THEN COUNT(*) END AS Validée, CASE WHEN Validation = 1 THEN COUNT(*) 
     END AS NonValidée, CASE WHEN Commandé = 0 THEN COUNT(*) END AS NonCommandé, 
     CASE WHEN Commandé <> 0 THEN COUNT(*) END AS Commandé, SUM(TotalHT) AS TotalHT 
FROM   V_DemandeAchat 
GROUP BY Designation_projet,Commandé,Validation 

S'il vous plaît aidez-moi à atteindre mon Gool. enter image description here

Merci à l'avance

Répondre

1

Vous pouvez le faire en utilisant l'agrégation de condition. Cela signifie que l'expression CASE est l'argument SUM() - il va « à l'intérieur » et non « en dehors »:

SELECT Designation_projet, COUNT(*) AS [Nb Demande], 
     SUM(CASE WHEN Validation = 0 THEN 1 ELSE 0 END) as Validée, 
     SUM(CASE WHEN Validation = 1 THEN 1 ELSE 0 END) as NonValidée, 
     SUM(CASE WHEN Commandé = 0 THEN 1 ELSE 0 END) AS NonCommandé, 
     SUM(CASE WHEN Commandé <> 0 THEN 1 ELSE 0 END) END AS Commandé, 
     SUM(TotalHT) AS TotalHT 
FROM V_DemandeAchat 
GROUP BY Designation_projet; 

Si vous voulez une ligne par Designation_projet, alors cela devrait être la seule clé du GROUP BY.

En supposant Validation prend que deux valeurs, vous pouvez simplifier les deux premières expressions d'agrégation:

SELECT Designation_projet, COUNT(*) AS [Nb Demande], 
     SUM(1 - Validation) as Validée, 
     SUM(Validation = 1) as NonValidée, 
     SUM(CASE WHEN Commandé = 0 THEN 1 ELSE 0 END) AS NonCommandé, 
     SUM(CASE WHEN Commandé <> 0 THEN 1 ELSE 0 END) END AS Commandé, 
     SUM(TotalHT) AS TotalHT 
FROM V_DemandeAchat 
GROUP BY Designation_projet; 

Vous pouvez être en mesure de simplifier les expressions Commandé ainsi.

+0

Merci c'est ce que je veux –

1

Essayez cette

SELECT  Designation_projet, COUNT(*) AS [Nb Demande],sum(CASE WHEN Validation = 1 THEN 1 else 0 END AS Validée,sum(CASE WHEN Validation = 1 THEN 1 else 0 
     END AS NonValidée, sum(CASE WHEN NonCommandé <> 1 THEN 1 else 0 END AS NonCommandé, 
     sum(CASE WHEN Commandé <> 1 THEN 1 else 0 END AS Commandé, SUM(TotalHT) AS TotalHT 
FROM   V_DemandeAchat 
GROUP BY Designation_projet 
+0

Je dois juste grouper par Designation_projet pour avoir 2 lignes dans ce cas, vous interrogez donner 4 lignes –