2017-03-22 1 views
1

J'essaie d'agréger certaines colonnes, mais il y a quelques conditions. Veuillez prendre en compte les éléments suivants:SQL Server - Sum avec conditions

Encounter 
number enc_id 
1324  01  

Charge 
charge_id enc_id amt1 amt2 amt3 
01   01  0.00 0.00 0.01 
02   01  0.00 0.01 0.02 

SELECT Encounter.number, sum(Charge.amt3) 
    FROM Charge 
    WHERE 
     Charge.enc_id = '01' 
    GROUP BY 
     Encounter.number 
    HAVING 
     sum(Charge.amt1 + Charge.amt2) = 0.00 

La règle de base de données indique qu'il y a plusieurs charges dans une rencontre. Je dois additionner amt3, mais si l'une des charges a la condition suivante: amt1> 0.00 ou amt2> 0.00 alors ne pas additionner les frais associés.

C'est ce que signifie être retourné

Enc_number sum(Charge.amt3) 
1234  0.01 

Je ne devrais pas être quelque chose retournais.

Comment puis-je faire cela?

Répondre

0

Je reçois correctement 0 lors de l'exécution de cette:

select 
    enc_id 
    , sum(c.amt3) as sumAmt3 
from Charge c 
where c.enc_id = 1 
group by c.enc_id 
having sum(c.amt1 + c.amt2) = 0.00; 

Une autre option supprime enc_id indésirable de la requête d'agrégation avec not exists():

select 
    c.enc_id 
    , sum(c.amt3) as sumAmt3 
from Charge c 
where c.enc_id = '01' 
    and not exists (
    select 1 
    from Charge i 
    where i.enc_id = c.end_id 
     and (i.amt1>0 or i.amt2>0) 
    ) 
group by c.enc_id; 

rextester demo: http://rextester.com/NFBKA57470