2017-03-22 3 views
1

Ich versuche, einige Spalten zu aggregieren, aber es gibt einige Bedingungen. Bitte beachten Sie folgende Punkte:SQL Server - Summe mit Bedingungen

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 

Die Datenbankregel besagt, dass in einer Begegnung mehrere Ladungen vorkommen. Ich muss amt3 Summe, aber wenn eine der Gebühren die folgende Bedingung haben: amt1> 0,00 oder amt2> 0.00 dann summieren keine der damit verbundenen Kosten.

Dies ist, was

Enc_number sum(Charge.amt3) 
1234  0.01 

zurückgegeben werden sollte ich nichts zurückkehren.

Wie kann ich das tun?

Antwort

0

ich richtig 0 Ergebnisse, wenn diese ausgeführt wird:

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; 

Eine weitere Option ist, unerwünschte enc_id aus der Abfrage Aggregation Entfernung mit 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