如何在SQL中将其转换为小数?下面是等式,我得到答案为78(整数),但真正的答案是78.6(带小数)所以我需要显示这个,否则报告不会达到100%
(100 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
答案 0 :(得分:19)
试试这个:
(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
答案 1 :(得分:8)
convert(decimal(5,2),(100 * convert(float,[TotalVisit1])/convert(float,[TotalVisits]))) AS Visit1percent
丑陋,但确实有效。
答案 2 :(得分:1)
至少在MySQL中(如果它有帮助),如果你想使用浮点数,你必须使用类型浮点字段,而不是常规的int字段。
答案 3 :(得分:1)
只需在100
中添加小数(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
这会强制所有处理都在浮点数中发生...如果你想将最终输出作为文本,并截断显示只有一个小数位,请使用Str函数
Str( 100.0 * [TotalVisit1]/[TotalVisits], 4, 1 ) AS Visit1percent
答案 4 :(得分:1)
subdomain
不丑,工作得更好,更快,享受它!
答案 5 :(得分:1)
这对我来说非常合适:
CAST((1.0 * SUM(ColumnA) /COUNT(ColumnB)) as decimal(5,2))
希望它可以帮助世界上某人。
答案 6 :(得分:0)
执行此操作可能有些过分,但您可能希望考虑将所有值投射到浮点数以确保所有阶段的准确性。
(100.0 * ( [TotalVisit1]+0.0 )/([TotalVisits]+0.0) ) as Visit1percent
注意,对于TotalVisits == 0的情况,你真的需要把代码放在这里,否则你会得到除以0的答案。
答案 7 :(得分:0)
SELECT(ROUND(CAST(TotalVisit1 AS DECIMAL)/TotalVisits,1)) AS 'Visit1percent'
这将返回一个小数,ROUND将其舍入为一位数。所以在你的情况下你会得到76.6。如果您不想要任何数字,请将1更改为0,如果您想要两位数,请将其更改为2.
答案 8 :(得分:0)
试试这个,没有round和str或Over()。我发现这是一种更简单的方法。
cast((count(TotalVisit1) * 100.0) /TotalVisits as numeric(5,3)) as [Visit1percent]
您可以根据需要更改小数点数
e.g。数字(5,2)或数字(5,4)
答案 9 :(得分:-1)
这可能无法直接解决您的问题,但是当您围绕一组数字进行显示时,除非您采取特殊预防措施,否则您无法保证获得的数字会增加到100。例如,舍入33.33333,33.33333和33.33333将在总和上留下一个简称,因此合乎逻辑的做法是修改集合中最大值的百分比以考虑任何差异。
这是在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
答案 10 :(得分:-1)
在ms访问中您可以使用SQL函数ROUND(数字,小数位数),它将数字四舍五入到给定的小数位数:
ROUND((100 * [TotalVisit1] / [TotalVisits]),1)AS Visit1percent