2017-03-09 86 views
1

我已經做了查詢,但它不給我我想要的東西:我如何使用情況,即隨着集團By語句

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 

請幫我實現我的GOOL。 enter image description here

在此先感謝

回答

1

你可以做到這一點使用情況彙總。這意味着CASE表達是參數SUM() - 它去「裏面」不是「外」:

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; 

如果你想每Designation_projet一行,那麼應該在GROUP BY唯一的關鍵。

假設Validation發生在只有兩個值,可以簡化前兩個聚集表達式:

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; 

您可以簡化Commandé表達式爲好。

+0

感謝這就是我想要的 –

1

試試這個

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

我只需要通過Designation_projet進行分組就可以在這種情況下有兩行,您可以查詢給出4行 –