SQL Server Express中视图COUNT值计算百分比结果为0.00的原因?
问题原因与解决方法
这是整数除法规则导致的结果:在SQL中,当两个整数类型的数值进行除法运算时,结果会自动取整(只保留整数部分,直接舍去小数部分)。
你这里的tcnt1、tcnt2、tcnt3、tcnt4都是INT类型,所以:
tcnt2 / tcnt1即12287 / 38347,计算结果小于1,整数除法后直接得到0,乘以100还是0,最后转成decimal(7,2)自然就是0.00。tcnt4 / tcnt3即125 / 673,同样结果小于1,整数除法后得到0,最终Pct2也为0.00。
解决方法
只要把除法运算中的任意一个整数转换为小数类型,就能触发浮点除法,得到正确的百分比结果,比如两种常见写法:
方法1:显式转换为decimal类型
SELECT *, CONVERT(decimal(7, 2), ((CONVERT(decimal, tcnt2) / tcnt1) * 100)) AS Pct1, CONVERT(decimal(7, 2), ((CONVERT(decimal, tcnt4) / tcnt3) * 100)) AS Pct2 FROM dbo.WScnt1, dbo.WScnt2, dbo.WScnt3, dbo.WScnt4;
方法2:用1.0参与运算,自动提升类型
SELECT *, CONVERT(decimal(7, 2), ((tcnt2 * 1.0 / tcnt1) * 100)) AS Pct1, CONVERT(decimal(7, 2), ((tcnt4 * 1.0 / tcnt3) * 100)) AS Pct2 FROM dbo.WScnt1, dbo.WScnt2, dbo.WScnt3, dbo.WScnt4;
内容的提问来源于stack exchange,提问作者John Sebold
相关产品推荐
相关产品推荐

