整型相除结果也是整数,你转型一下。select id,rtrim(cast(100*sum(code)as float)/cast(count(1)as float))+'%' as 正确率 from # group by id 

解决方案 »

  1.   

    --后面加个*1.0
    select id,rtrim(100*sum(code)*1.0/count(1))+'%' as 正确率 from # group by id 
      

  2.   

    select id,rtrim(cast(100*sum(code)*1.0/case count(1) when 0 then 1 else count(1) end as dec(9,2)))+'%' as 正确率 from # group by id 使用两位小数,考虑零除。
      

  3.   


    select * from # 的结果是什么,贴出来看看
      

  4.   

    select id,rtrim(100.0*sum(code)/count(1))+'%' as 正确率 from # group by id SQL在处理数值时,在没有必要类型转换时,是不会产生类型转换的。除非认为的给出运算中的等级高的数据类型。在我给出的方案中,100换成了100.0,这样系统就会按照float类型进行计算了,不会产生小数点舍去的现象,能够保证结果数据近似等于100%。