2017-04-08 88 views
0

如何減少查詢中SUM函數的數量?減少查詢中重複SUM函數的數量

SELECT P_NAME "Product name", (SUM(case when PR = 1 then QUANTITY end) - 
SUM(case when PR = 2 then QUANTITY end)) "End balance", 
CAST((SUM(case when PR = 1 then QUANTITY*PRICE end) - SUM(case when PR = 2 then 
QUANTITY*PRICE end)) as decimal(13,2)) "End balance" FROM RPOD, DMS, DMZ 
WHERE RPOD.KTOV=DMS.KTOV AND DMZ.NDM=DMS.DMZ_FK 
GROUP BY P_NAME 
ORDER BY P_NAME; 
+0

我認爲減少總和會改變你的邏輯,只有我會改變的是使用別名和使用現​​代風格的聯接 – TheGameiswar

回答

2

你可以將它們組合起來:

SELECT P_NAME as "Product name", 
     SUM(case when PR = 1 then QUANTITY 
       when PR = 2 then - QUANTITY 
      end) as "End balance", 
     SUM(case when PR = 1 then QUANTITY * PRICE 
       when PR = 2 then - QUANTITY * PRICE 
      end) as "End balance/price", 
FROM RPOD JOIN 
    DMS 
    ON RPOD.KTOV = DMS.KTOV JOIN 
    DMZ 
    ON DMZ.NDM = DMS.DMZ_FK 
GROUP BY P_NAME 
ORDER BY P_NAME; 

更爲重要的美學約SUM() s的學習使用得當,明確JOIN語法。 從不JOIN子句中使用逗號。另外,您不應該在結果集中給出兩個相同的名稱。