2016-01-31 49 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會進行整數除法。