SQL Server 2012中的Where子句正在影响舍入行为

时间:2017-06-25 13:49:51

标签: sql-server sql-server-2012

我理解FLOAT数据类型可能不准确,但是如果我添加或删除WHERE子句DeptCategoryScore,为什么下面的查询会为我的WHERE sub2.DeptID=210059返回不同的舍入结果?

SELECT Sub2.DeptID,
   Sub2.CategoryID,
   Round(Avg(CAST(PersonAverage AS FLOAT)), 0) AS 'DeptCategoryScore'
FROM   (SELECT Sub1.PersonId,
           Sub1.CategoryId,
           Sub1.DeptId,
           Avg(CAST(PersonSum AS FLOAT)) AS 'PersonAverage'
    FROM   personsum AS Sub1
    GROUP  BY Sub1.PersonID, Sub1.CategoryID, Sub1.DeptID) AS Sub2
WHERE sub2.DeptID=210059
GROUP BY sub2.DeptID, sub2.CategoryID
ORDER BY sub2.DeptID, sub2.CategoryID

我希望不准确性能以相同的方式工作,无论我是否过滤特定的DeptID,或者想让查询一次性返回所有DepIDs / CategoryID组合。

当查看将88 vs 87作为DeptCategoryScore的特定实例时,我发现背后的确切值是87.499999999 ...仍然有趣的是,添加WHERE子句使其成为88,而将其留下将舍入到87。

我还试验了WHERE sub2.DeptID BETWEEN 100000 AND 300000,并不断增加上边界。我发现,在包括太多DepID之后,分数会在某个时刻发生变化。

如果您对此有假设或解释,请分享一些见解。

0 个答案:

没有答案