2010-06-01 42 views
1

我試圖使用類似於下面的代碼行的存儲過程獲取一定比例的數據。顯然,這是要導致(由零誤差除以遇到)的問題時基。[XXX_DataSetB]返回0,這可能會發生一些時間。T-SQL 2005 - 除以零誤差遇到

有誰知道我可以解決這個問題最有效的方式?

注:會有看起來像下面的一個約20多行...

cast((base.[XXX_DataSetB] - base.[XXX_DataSetA]) as decimal)/
          base.[XXX_DataSetB] as [XXX_Percentage] 

回答

2

我想這取決於你所期望的行爲時,XXX_DataSetB爲零。

如果你不希望任何返回的行可能通過增加where XXX_DataSetB <> 0到您的查詢導致錯誤,您可以輕鬆地過濾掉那些行。

如果你想問題的行爲NULL,那麼你可以使用一個case語句,或者是這樣的:

cast(([XXX_DataSetB] - [XXX_DataSetA]) as decimal)/nullif([XXX_DataSetB], 0) 
1

我會通過使底空一詞,而不是零迫使平均爲null:

cast((base.[XXX_DataSetB] - base.[XXX_DataSetA]) as decimal) 
    /case when base.[XXX_DataSetB] = 0 then null 
     else base.[XXX_DataSetB] end as [XXX_Percentage]