Dav*_*ave 4 sql t-sql sql-server sql-server-2005
我有一段T-SQL代码,看起来像这样:
select @automation_rate =
case
when @total_count = 0 then 0
else @automated_count / @total_count
end
Run Code Online (Sandbox Code Playgroud)
@automation_rate是十进制(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
Run Code Online (Sandbox Code Playgroud)
如您所见,除了自动=总数之外,所有值的比率均为0.00.我还有一个Excel电子表格,它执行相同的基本计算,每次都是完美的(就像"预期"列一样).
那我哪里出错了?
(这是在MS SQL Server 2005上,关于任何影响的关闭机会)
编辑感谢大家的答案.我假设整数舍入部分,因为它正在移动到它会自动转换的十进制数据类型,而不是意识到它会进行计算,舍入,然后转换.每个人都有类似的答案,所以所有人都赞成.
Aar*_*and 10
这似乎是由于整数数学,因为@automated_count和@total_count显然是整数.你需要说:
1.0*@automated_count / @total_count
Run Code Online (Sandbox Code Playgroud)
或者更明确地说:
CONVERT(DECIMAL(5,2), @automated_count) / @total_count
Run Code Online (Sandbox Code Playgroud)
这些也将产生0.3798等,所以你可能想要:
CONVERT(DECIMAL(5,2), 100.0*@automated_count / @total_count)
Run Code Online (Sandbox Code Playgroud)