これをSQLで10進数に変換するにはどうすればよいですか? 以下は方程式で、答えは 78 (整数) になりますが、実際の答えは 78.6 (小数を含む) であるため、これを表示する必要があります。そうしないと、レポートが 100% に集計されません
(100 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
これを試して:
(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
convert(decimal(5,2),(100 * convert(float,[TotalVisit1])/convert(float,[TotalVisits]))) AS Visit1percent
醜いですが、うまくいきます。
少なくとも MySQL では (それが役立つ場合)、浮動小数点数を使用する場合は、通常の int フィールドではなく、浮動小数点型フィールドを使用する必要がありました。
100に小数を足すだけ
(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
これにより、すべての処理が浮動小数点数で強制的に行われます...最終出力をテキストとして表示し、表示のために小数点以下1桁に切り捨てたい場合は、Str関数を使用します
Str( 100.0 * [TotalVisit1]/[TotalVisits], 4, 1 ) AS Visit1percent
SELECT(ROUND(CAST(TotalVisit1 AS DECIMAL)/TotalVisits,1)) AS 'Visit1percent'
これは小数を返し、ROUND はそれを 1 桁に丸めます。したがって、あなたの場合は76.6になります。数字が不要な場合は 1 を 0 に変更し、2 桁が必要な場合は 2 に変更します。
これを行うのはおそらくやり過ぎですが、すべてのフェーズで精度を確保するために、すべての値を float にキャストすることを検討することをお勧めします。
(100.0 * ( [TotalVisit1]+0.0 )/([TotalVisits]+0.0) ) as Visit1percent
TotalVisits == 0 の場合、ここにコードを挿入する必要があることに注意してください。そうしないと、0 による除算の回答が得られます。
これは問題に直接対処しないかもしれませんが、表示用に一連の数値を四捨五入すると、特別な予防策を講じない限り、合計が 100 になる数値が得られることは保証されません。たとえば、33.33333、33.33333、および 33.33333 を四捨五入すると、合計が 1 つ不足するため、セット内の最大値のパーセンテージを変更して差を考慮に入れるのが論理的です。
これは、Oracle SQL で分析関数とサブクエリ ファクタリング (WITH) 句を使用してサンプル データを生成する方法です。
with data as (select 25 num from dual union all
select 25 from dual union all
select 25 from dual)
select num,
case
when rnk = 1
then 100 - sum(pct) over (order by rnk desc
rows between unbounded preceding
and 1 preceding)
else pct
end pct
from
(
select num,
round(100*ratio_to_report(num) over ()) pct,
row_number() over (order by num desc) rnk
from data
)
/
NUM PCT
---------------------- ----------------------
25 33
25 33
25 34
ms Access では、SQL 関数 ROUND(number, number of decimals) を使用できます。これは、数値を指定された小数点以下の桁数に丸めます。
ROUND((100 * [TotalVisit1]/[TotalVisits]),1) AS Visit1percent