2017-03-22 1 views
1

일부 열을 집계하려하지만 일부 조건이 있습니다. 다음을 고려하십시오.SQL Server - 조건 합계

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 

데이터베이스 규칙은 만남에 여러 요금이 부과됩니다. amt3을 합산해야하지만, 요금 중 하나라도 amt1> 0.00 또는 amt2> 0.00 인 경우 요금이 합산되지 않습니다.

내가 아무 것도 반환하지 않아야
Enc_number sum(Charge.amt3) 
1234  0.01 

무엇 반환되고있다.

어떻게하면됩니까? 이 실행시

답변

0

내가 정확히 0 결과를 얻을 :

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; 

을 또 다른 옵션은 not exists()로 집계 쿼리에서 원치 않는 enc_id을 제거하고 :

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 데모 : http://rextester.com/NFBKA57470