【发布时间】:2011-07-09 09:29:45
【问题描述】:
你好 我在汇总浮点值时得到了不同的结果。查询如下
declare @cy datetime
set @d = '12/01/2010'
select SUM(total) from (
select sum(amt1) as total from table1
where date1 < @d
union all
select sum(amt1) as total from table1
where date1 >= @d
) as a
amt1 的数据类型是浮点数。
所以查询只是聚合表 table1 中的列总计。 现在,如果我将变量 @d 更改为“2010 年 1 月 1 日”,我会得到不同的金额。 我在不同的时间范围内不断获得不同的金额 为什么会这样。我希望每次运行与下面的查询匹配的查询的结果都是相同的 从 table1 中选择 sum(amt1)
谢谢 本
更新:我正在使用联合所有。感谢您指出。它仍然给我不同的结果
【问题讨论】:
-
我正在使用 union all(错过了我发布的查询中的那个),但它仍然返回不同的值
-
您在第一个查询中求和
amt1和在第二个查询中求和amt是不是错字?否则你很可能会期待不同的结果。 -
您是否尝试过将浮点数转换为更高的精度
float(24)我想? -
如果你尝试转换为精确的数字类型,你仍然会得到差异吗?
-
好吧,我想我们可能会回到 the order in which the numbers are added makes a difference 的想法,但这比我在测试中设法获得的差异要大得多。涉及多少行?还有什么是最大和最小的正数和最大和最小的负数?
标签: sql-server-2008 aggregation