我有两张桌子
Master
Detail
在Master&细节表
我得到Amount Applied of Detail的总和,并从Master中的Initial Amount中减去它并显示在" REMAIN"
select m.ID, m.Init_Amnt, m.Cur_Amnt, max(m.Init_Amnt) - sum(d.Amnt_appl) REMAIN
from AMASTER m
left join ADETAIL D on m.ID = d.Master_ID
group by m.ID, m.Init_Amnt, m.Cur_Amnt
有没有办法只显示那些保留在非空或者保留的地方> 0.00
答案 0 :(得分:4)
因为这是聚合结果的过滤器,所以需要一个HAVING子句。根据您的SQL风格,如下所示:
HAVING ISNULL(max(m.Init_Amnt) - sum(d.Amnt-Appl), 1) > 0
在这里,1只是一个“幻数”,在空的情况下满足> 0
条件。
答案 1 :(得分:1)
需要HAVING
子句:
select
m.ID,
m.Init_Amnt,
m.Cur_Amnt,
max(m.Init_Amnt) - sum(d.Amnt_appl) REMAIN
from AMASTER m
left join ADETAIL D on m.ID = d.Master_ID
group by m.ID, m.Init_Amnt, m.Cur_Amnt
HAVING REMAIN > 0.0
注意一些RDBMS不允许上面的语法(适用于MySQL),使用列别名。相反,您可能需要将完整计算放入HAVING
(SQL Server以这种方式行事,Oracle也是如此)
select
m.ID,
m.Init_Amnt,
m.Cur_Amnt,
max(m.Init_Amnt) - sum(d.Amnt_appl) REMAIN
from AMASTER m
left join ADETAIL D on m.ID = d.Master_ID
group by m.ID, m.Init_Amnt, m.Cur_Amnt
HAVING max(m.Init_Amnt) - sum(d.Amnt_appl) > 0.0
答案 2 :(得分:0)
Try this:
select m.ID,m.Init_Amnt, m.Cur_Amnt, max(m.Init_Amnt) - sum(d.Amnt_appl) REMAIN
from AMASTER m
left join ADETAIL D on m.ID = d.Master_ID
group by m.ID, m.Init_Amnt, m.Cur_Amnt
HAVING ISnull(max(m.Init_Amnt),0) - IsNull(sum(d.Amnt_appl),0) > 0.0