2017-04-08 1 views
0

Comment réduire le nombre de fonctions SUM dans ma requête?Réduire le nombre de fonctions SUM répétées dans la requête

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

Je pense que la réduction de la somme va changer votre logique, la seule chose que je vais changer est d'utiliser des alias et d'utiliser des jointures de style moderne – TheGameiswar

Répondre

2

Vous pouvez les combiner:

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; 

esthétique beaucoup plus important sur les SUM() s est d'apprendre à utiliser une bonne, explicite la syntaxe JOIN. Jamais utiliser des virgules dans la clause JOIN. En outre, vous ne devez pas donner deux colonnes dans le résultat définir le même nom.