14

如何在 SQL 中将其转换为小数?下面是等式,我得到的答案是 78(整数),但真正的答案是 78.6(带小数)所以我需要显示这个,否则报告不会达到 100%

(100 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
4

11 回答 11

22

试试这个:

(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
于 2008-12-30T15:34:40.067 回答
8
convert(decimal(5,2),(100 * convert(float,[TotalVisit1])/convert(float,[TotalVisits]))) AS Visit1percent

丑陋,但它的工作原理。

于 2008-12-30T15:41:30.663 回答
2
CAST(ROUND([TotalVisit1]*100.0/[TotalVisits],2)as decimal(5,2)) as Percentage


不丑,工作更好更快,享受吧!

于 2017-06-13T15:03:35.863 回答
1

至少在 MySQL 中(如果有帮助的话),如果你想使用浮点数,你必须使用类型 float 字段,而不是常规的 int 字段。

于 2008-12-30T15:34:18.867 回答
1

只需将小数添加到 100

(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent

这会强制所有处理都以浮点数进行...如果您希望最终输出为文本,并被截断以仅显示一位小数,请使用 Str 函数

Str( 100.0 * [TotalVisit1]/[TotalVisits], 4, 1 ) AS Visit1percent
于 2008-12-30T15:49:20.273 回答
1

这对我来说非常有效:

CAST((1.0 * SUM(ColumnA) /COUNT(ColumnB)) as decimal(5,2))

希望它可以帮助世界上的某个人。

于 2020-01-10T19:57:29.517 回答
0

这样做可能有点矫枉过正,但您可能希望考虑将所有值转换为浮点数以确保所有阶段的准确性。

(100.0 * ( [TotalVisit1]+0.0 )/([TotalVisits]+0.0) ) as Visit1percent

请注意,对于 TotalVisits == 0 的情况,您确实需要在此处输入代码,否则您将得到除以 0 的答案。

于 2008-12-30T15:40:41.303 回答
0
SELECT(ROUND(CAST(TotalVisit1 AS DECIMAL)/TotalVisits,1)) AS 'Visit1percent'

这将返回一个小数,而 ROUND 会将其四舍五入为一位数。所以在你的情况下,你会得到 76.6。如果您不想要任何数字,请将 1 更改为 0,如果您想要两位数,请将其更改为 2。

于 2013-05-29T21:36:34.793 回答
0

试试这个,没有round和str或Over()。我发现这是一种更简单的方法。

cast((count(TotalVisit1) * 100.0) /TotalVisits as numeric(5,3))  as [Visit1percent]

您可以根据需要更改小数位数

例如数字(5,2)或数字(5,4)

于 2017-08-02T12:39:17.377 回答
-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                     
于 2008-12-30T16:39:35.490 回答
-1

在 ms Access 中可以使用 SQL 函数 ROUND(number, number of decimals),它将数字四舍五入到给定的小数位数:

ROUND((100 * [TotalVisit1]/[TotalVisit]),1) AS Visit1percent

于 2013-08-22T21:26:30.107 回答