2011-05-27 62 views
2

HI 我在聚合float值时得到不同的结果。查询如下sql server聚合浮点值

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的数据类型为float。

所以查询只是聚合表table1中的列总数。 现在,如果我更改变量@d可以说'01/01/2010'我得到不同的数额。 我不断收到不同的时间范围 为什么会发生这种情况。我希望的结果是一样的,每次我跑这将是从表1

感谢以下 选择总和(AMT1)查询匹配 本

更新查询:我使用UNION ALL。感谢您指出。它仍然给我不同的结果

+0

我正在使用union all(错过了我发布的查询中的内容)并仍然返回不同的值 – user55474 2011-05-27 19:59:13

+1

是第一个查询中“amt1”和第二个中“amt”总和的错字?否则,你可能会非常期待不同的结果。 – 2011-05-27 19:59:52

+0

你有没有试过把你的浮标铸造成更高精度的浮子(24)'我想? – 2011-05-27 20:02:07

回答

0

我怀疑你使用的是UNION,因为你的查询中实际上有两个不同的表,例如table1table2。在这种情况下,当日期发生变化时,您不应该期望和数相同。

更新:我刚才注意到,您在一个查询,并在其他amt1选择amt,所以没有理由去期待的款项是相同日期的变化。

+0

我认为他实际上正在做的是将表中的记录按给定的日期分割(即,e之前的所有记录和之后的所有记录)。在这种情况下,假设返还相同的总额是公平的。 – 2011-05-27 19:55:37

+0

这就是正确的我分裂的记录。我会假设无论日期范围我给 – user55474 2011-05-27 19:58:25

+0

@ user55474看到我的更新,你都不会分裂它们,因为你从两个不同的列中选择 – RedFilter 2011-05-27 19:59:14