【发布时间】:2010-01-12 13:48:53
【问题描述】:
我已经解决了这个问题,但我只是想知道为什么会这样。我有一个要从中选择的临时表,并希望显示一个名称、与该名称匹配的记录数以及该名称在总记录中的百分比。这是我最初的方式:
SELECT name, number,
CASE WHEN number = 0 THEN 0 ELSE
convert(Numeric(10,2), number / CONVERT(decimal(5,2),SUM(number)) * 100)
END as "Percentage of Total"
FROM #names
group by name, number
我收到的结果是:
name number Percentage of Total
------------------------- ----------- ---------------------------------------
Test 1 0 0.00
Test 2 22 100.00
Test 3 28 100.00
当我把查询改成这个时,结果是正确的:
declare @total decimal(5,2)
select @total = SUM(number) FROM #names
SELECT name, number, convert(Numeric(10,2), number/ @total * 100) as "Percentage of Total"
FROM #names
group by name, number
正确结果:
name number Percentage of Total
------------------------- ----------- ---------------------------------------
Test 1 22 44.00
Test 2 0 0.00
Test 3 28 56.00
有人可以解释发生了什么,我想更好地理解这一点。谢谢!
乔恩
【问题讨论】:
标签: sql sql-server stored-procedures rounding