次のような T-SQL コードのセクションがあります。
select @automation_rate =
case
when @total_count = 0 then 0
else @automated_count / @total_count
end
@automation_rate は decimal(3,2) です。@total_count と @automated_count は整数です。
残念ながら、@automation_rate に返される値は 0 か 1 だけです。明らかに何か問題があり、ばかばかしいほど単純かもしれませんが、私の人生ではそれを見ることができません。
基になる結果セット (テーブルをループしています) のすべてのデータは、0 または正の整数です。自動化率を除いて、すべての値は整数です。
値の例と、(電卓を使用した) 期待値と実際の結果を次に示します。
automated count total count expected ratio actual ratio
--------------- ----------- -------------- ------------
0 35 0.0 0.00
98 258 37.98 0.00
74 557 13.29 0.00
140 140 1.00 1.00
ご覧のとおり、automatic = total 以外のすべての値の比率は 0.00 です。また、同じ基本的な計算を行う Excel スプレッドシートもあり、毎回完璧な結果が得られます (つまり、「期待される」列のように)。
それで、どこで間違ったのですか?
(これは MS SQL Server 2005 でのものですが、まったく影響がない可能性があります)
編集回答してくれた皆さんに感謝します。整数の丸め部分は、計算、丸め、そして変換を行うことに気付くのではなく、自動的に変換される 10 進データ型に移行しているためと仮定して吹き飛ばしました。誰もが同様の答えを持っていたので、賛成票を投じました。