2012-02-16 55 views
0

我有兩個表過濾我的SQL只顯示那些記錄> 0

Master 
Detail 

在主&詳細信息表

我得到覈銷額的總和詳細信息,並從初始量減去它碩士和顯示在「保持」

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

回答

4

因爲這是對聚合結果的過濾器,所以您需要HAVING子句。根據您的SQL的味道,這樣的事情:

HAVING ISNULL(max(m.Init_Amnt) - sum(d.Amnt-Appl), 1) > 0 

在此,1只是一個「幻數」,以滿足在一個空的情況下,> 0條件。

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充當這種方式,如同甲骨文)

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