计算比率只给0或1?

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)