2010-06-01 46 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]