我想找到一种迭代方法来获取与完全外连接上返回的数据的百分比差异,该方法允许当前值和以前的值都为空,因为它们可能已从任一结果集中退出。
在通常的计算下允许先前的值是好的,这将是......
round(abs(100.0*(isnull(am.[Current Value],0) - isnull(pm.[Previous Value],0)) / isnull(pm.[Previous Value],0)), 2) <> 0
但是,这不允许当前值为零,并且您将得到除以零的错误。到目前为止,我想到的唯一相对安全的解决方法是将 isnull 值设置为 1,然后检查数量是否与当前值匹配并设置为 100,但我认为我不能长期依赖它,确实有人有更好的产品吗?
case when round(abs(100.0*(isnull(am.[Current Value],0) - isnull(pm.[Previous Value],0)) / isnull(pm.[Previous Value],1)), 2) = (isnull(am.[Current Value],0)*100) then 100
else round(abs(100.0*(isnull(am.[Current Value],0) - isnull(pm.[Previous Value],0)) / isnull(pm.[Previous Value],1)), 2)
end '%Diff'