过滤我的SQL以仅显示那些记录> 0

时间:2012-02-16 14:36:04

标签: sql

我有两张桌子

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

3 个答案:

答案 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