いずれかの結果セットから脱落した可能性があるため、現在の値と以前の値の両方を null にすることができる、完全な外部結合で返されたデータからパーセンテージの差を取得する反復的な方法を見つけたいと思います。
以前の値を考慮しても、通常の計算では問題ありません....
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'