2015-10-01 138 views
0

我正在對QTY字段進行聚合,該字段將具有0或正值。因此任何正數的存在都可以預測總和將大於0.一旦找到正值,而不是對所有行進行求和,有什麼方法可以返回真?它是DB2數據庫。如何告訴SQL在「正值發生」而不是使用SUM(字段)> 0條件時返回TRUE

select * 
    from a 
    where a_id in (1,2,3,4) 
    and 
    (
     flag = 'Y' 
     or 
     (select sum(qty) from b where b.a_id = a.a_id) > 0 
    ) 
+1

如果列中存在負值,那麼您認爲邏輯會失敗。 –

+0

確實如此,但如果數據存在,那麼聚合函數必須添加500行以上,這讓我很好奇,想要找到一種方法在任何正值出現時返回TRUE,而不是添加500個字段值。雖然我的想法可能是錯誤的.. – Raja

+1

'sum'已經足夠快了。並添加500 +行值並不像你想象的那樣繁瑣 –

回答

2

使用EXISTS可以更快嗎?

select * 
    from a 
    where a_id in (1,2,3,4) 
    and 
    (
     flag = 'Y' 
     or 
     EXISTS (select b.a_id from b where b.a_id = a.a_id and qty>0) 
    ) 
+0

我必須檢查,但如果數據存在,則特定聚合必須求和500+行。 90%的時間會有數據..存在可以改善,但我想知道是否有任何其他函數或技巧是否有任何正面的值返回TRUE – Raja

+0

我認爲你會發現EXISTS完全是這樣。祝你好運,拉賈。 –

+0

糟糕!只有我的錯誤:|我應該已經注意到,這個數字> 0並存在...感謝您保持耐心,通過我的廢話:) – Raja