SQL Server - 条件求和

时间:2017-03-22 22:26:35

标签: sql-server-2008-r2

我正在尝试聚合一些列,但有一些条件。请考虑以下事项:

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

我不应该退货。

我该怎么做?

1 个答案:

答案 0 :(得分: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