2017-04-21 83 views
1

爲什麼這給了我一個零誤差的鴻溝?我希望這個返回的數據庫中的記錄數與聲明的參數。謝謝您的幫助。爲什麼這給了我一個由零誤差劃分

SELECT COUNT(*) 
FROM dbcrms.ccars.ci_submission_history 
    where crms_dt = '2016-12-31' 
     and totalliabilities <> null or totalliabilities <> 0 
      and mra_required = 'Yes' 
       and committedexposure/totalliabilities <= 1 

我使用SQL Server 2014

+0

因爲您忘記了括號 –

+0

總值爲零 – Bestter

+0

因爲至少有一行的總可用性值爲0並且沒有括號。 –

回答

6

你不能保證在您的條款將被評估的順序,所以committedexposure/totalliabilities可之前totalliabilities <> 0

一種解決方法與nullif()設置0null評價:

SELECT COUNT(*) 
FROM dbcrms.ccars.ci_submission_history 
    where crms_dt = '2016-12-31' 
     and totalliabilities <> 0 
      and mra_required = 'Yes' 
       and committedexposure/nullif(totalliabilities,0) <= 1 

and <> null應該可能是is not null,如果是totalliabilities <> 0,那將是真的,所以它是多餘的。

另外,請注意and takes precedence over or就邏輯運算符而言。最好是包裝你的or的每一面,以便清楚你想要完成什麼。

+0

太棒了。謝謝! –

+0

@DanielBailey樂意幫忙! – SqlZim

相關問題