2016-01-31 47 views
0

我有这样的代码,我试图比较[Dis][Estimator]这是一个变量,我补充说:浮点值

SELECT 
    [Id], 
    [Sym], 
    [Month], 
    [Dis], 
    Estimator = 4/count(Id) over (partition by Sym, Month) 
FROM 
    [RegularPayResultsYearly] 

我再次尝试比较DisEstimator

例如,count(Id) over (partition by Sym, [Month])是12091个观察值。

问题:虽然Dis列是float类型(例如值: 8.2944916060179E-06,9.07691249104339E-05)似乎

4/count(Id) over (partition by Sym, [Month]) as cnt 

是3.308245802663138e-4不能再进一步比零,它告诉我 估计= 0。

任何方式来改变?

谢谢。

+0

根据非标准语法添加'sql-server'标记 –

+0

不确定但您是否尝试写入:4.0/count(Id)而不是4/count(Id) – ehh

回答

0

不幸的是,您无法使用相等性来比较浮点时间 - 并且始终准确无误。你可以有两个解决方案。之一就是采取的差的绝对值,并调用它0,如果它小于一些(任意的)阈值:

SELECT . . ., 
     (CASE WHEN ABS(Dis) - 4/count(Id) over (partition by Sym, Month)) < 0.001 
      THEN 'EQUAL' 
      ELSE 'NOTEQUAL' 
     END) 
FROM RegularPayResultsYearly 

第二种是使用十进制/数字而不是浮动:

SELECT . . ., 
     (CASE WHEN CAST(Dis, DECIMAL(10, 3)) = 
        CAST(4.0/count(Id) over (partition by Sym, Month) AS DCIMAL(10, 3) = 0 
      THEN 'EQUAL' 
      ELSE 'NOTEQUAL' 
     END) 
FROM RegularPayResultsYearly 

请注意,表达式4/COUNT(ID) OVER (PARTITiON BY Sym, Month)将返回一个整数(可能为0)。当两个操作数都是整数时,SQL Server会进行整数除法。