2015-11-01 60 views
1

我有一些代碼用於計算表中某一行的平均值。問題是,現在的MinTweeMinEennulPlusEenPlusTwee總和(是列名)等於零,它由零異常(什麼是正常的,當然)給了我一個鴻溝。你怎麼能保護它呢?如果總和等於零,那麼平均值也等於該行的零。我使用SQL Server 2014SQL Server中一行中列的平均值除以零異常

select top 5 
    id, mintwee, mineen, nul, pluseen, plustwee, naam 
from 
    topic 
where 
    CategorieID = 7 and verwijderd = 0 
order by 
    round(cast((mintwee * (-2) + mineen * (-1) + nul * 0 + pluseen * 1 + PlusTwee * 2) as float)/(MinTwee + MinEen + nul + PlusEen + PlusTwee), 1) desc, creatie desc 

回答

3

可以測試值爲0時,與

select top 5 id, mintwee, mineen, nul, pluseen, plustwee, naam 
from topic 
where CategorieID = 7 and verwijderd = 0 
order by 
    case when (MinTwee + MinEen + nul + PlusEen + PlusTwee) = 0 then creatie 
    else 
    round(cast((mintwee * (-2) + mineen * (-1) + nul * 0 + pluseen * 1 + PlusTwee * 2) as float)/(MinTwee + MinEen + nul + PlusEen + PlusTwee), 1) 
    end 
    desc, 
    creatie desc 
+2

我想那麼0就會更加正確。 –

1

我想,以避免錯誤的最簡單方法是nullif()的情況下:

order by 
    coalesce(round(cast((mintwee * (-2) + mineen * (-1) + nul * 0 + pluseen * 1 + PlusTwee * 2) as float)/
      nullif(MinTwee + MinEen + nul + PlusEen + PlusTwee, 0), 1), 0) desc, 
    creatie desc 
+0

我已經嘗試你的查詢,但如果總和爲零,如果給出null(不是數字),那不是我將會有的。 –

+0

@ Hein。 。 。通常,在這些情況下,最好的值是'NULL',但如果你想要0,那麼使用'COALESCE()'。 –