我正在尝试使用类似于以下行的代码从存储过程中获取一些百分比数据。显然这会导致(基于错误时遇到零错误)问题。[XXX_DataSetB]返回0,这可能会在某些时候发生。
有谁知道如何以最有效的方式处理这个问题?
注意:大约有20多行看起来像下面一行...
cast((base.[XXX_DataSetB] - base.[XXX_DataSetA]) as decimal) /
base.[XXX_DataSetB] as [XXX_Percentage]
答案 0 :(得分:2)
我想这取决于当XXX_DataSetB为零时你期望的行为。
如果您不希望返回任何可能导致错误的行,则可以通过向查询中添加where XXX_DataSetB <> 0
来轻松过滤掉这些行。
如果您希望问题行为NULL,那么您可以使用case语句,或类似的东西:
cast(([XXX_DataSetB] - [XXX_DataSetA]) as decimal) / nullif([XXX_DataSetB], 0)
答案 1 :(得分: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]