これをSQLで小数に変換するにはどうすればよいですか?以下は方程式で、答えは78(整数)ですが、実際の答えは78.6(10進数)なので、これを表示する必要があります。そうしないと、レポートが100%まで集計されません。
(100 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
convert(decimal(5,2),(100 * convert(float,[TotalVisit1])/convert(float,[TotalVisits]))) AS Visit1percent
醜いですが、動作します。
これを試して:
(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
CAST(ROUND([TotalVisit1]*100.0/[TotalVisits],2)as decimal(5,2)) as Percentage
醜くなく、より良く、より速く動作します、楽しんでください!
少なくともMySQLでは(役立つ場合)、float数値を使用する場合は、通常のintフィールドではなく、float型フィールドを使用する必要がありました。
100に小数を追加するだけです
(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
これにより、すべての処理がfloatで実行されます...最終出力をテキストとして表示し、小数点以下1桁まで表示するために切り捨てる場合は、Str関数を使用します。
Str( 100.0 * [TotalVisit1]/[TotalVisits], 4, 1 ) AS Visit1percent
これは私にとって完璧に機能します:
CAST((1.0 * SUM(ColumnA) /COUNT(ColumnB)) as decimal(5,2))
それが世界中の誰かに役立つことを願っています。
これを試してみてください。roundとstrまたはOver()は使用しないでください。私はこれをより簡単な方法として見つけました。
cast((count(TotalVisit1) * 100.0) /TotalVisits as numeric(5,3)) as [Visit1percent]
必要に応じて小数点数を変更できます
例えば数値(5,2)または数値(5,4)
これを行うのはおそらくやり過ぎですが、すべてのフェーズで精度を確保するために、すべての値を浮動小数点数にキャストすることを検討することをお勧めします。
(100.0 * ( [TotalVisit1]+0.0 )/([TotalVisits]+0.0) ) as Visit1percent
TotalVisits == 0の場合は、ここにコードを入力する必要があります。そうしないと、0で除算されます。
SELECT(ROUND(CAST(TotalVisit1 AS DECIMAL)/TotalVisits,1)) AS 'Visit1percent'
これは小数を返し、ROUNDはそれを1桁に丸めます。したがって、あなたの場合、76.6を取得します。数字が必要ない場合は1を0に変更し、2桁が必要な場合は2に変更します。