0

我想找到一种迭代方法来获取与完全外连接上返回的数据的百分比差异,该方法允许当前值和以前的值都为空,因为它们可能已从任一结果集中退出。

在通常的计算下允许先前的值是好的,这将是......

 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'
4

1 回答 1

0

抱歉,现在还早,简单的解决方案

case    when isnull([Current Total Value],0) = 0 and isnull([Previous Total Value],0) <> 0 then 100
            when isnull([Previous Total Value],0) = 0 and isnull([Current Total Value],0) <> 0 then 100
            when isnull([Previous Total Value],0) = 0 and isnull([Current Total Value],0) = 0 then 0
            else round(abs(100.0*(isnull(am.[Current Total Value],0) - isnull(pm.[Previous Total Value],0)) / isnull(pm.[Previous Total Value],0)), 2)
            end  
于 2014-08-14T09:18:20.947 回答