2015-06-17 70 views
2

我从另一个表中传递一系列double值,范围从-1到1.如果值是正数,我想使它与1之间的差值(即0.2会变成0.8)。如果价值是负数,我希望它现在是1以上的三角形负数(即0.2将是1.2)。SQL案例值切换

由于某些原因,当我这样做时,它会从上一个表中取值,并使它们符合第一个WHEN的条件(因此在此设置中,所有传入的值都被设置为正数,并打到第一个什么时候)。

为什么不能正常工作?

SELECT SnapshotDay 
    ,SnapshotHour 
    ,CASE 
     WHEN Delta > 0.0 THEN (1 - Delta) 
     WHEN Delta <= 0.0 THEN (abs(Delta) + 1) 
     END as Adjust 
FROM #Difference 

例子:

-0.00118341262814151 --> 0.998816587371859 
0.00130811285278974 --> 0.99869188714721 
+0

请告诉我'delta'的数据类型? –

+0

你的例子是你想要的结果还是不正确的结果? –

+0

Double;这是不正确的 - 斯坦利的观察让我完全避免它。 – RoyalGoat

回答

2

我不知道为什么你看到你的结果,但在数学上你预期的结果就是1 - Delta

SELECT SnapshotDay 
    ,SnapshotHour 
    ,(1 - Delta) as Adjust 
FROM #Difference 

如果Delta是正面它将从1减去:

(1 - Delta) 

如果Delta是负的绝对值将被添加到1:

(-1*Delta + 1) == (1 - Delta) 
+0

还没有弄清楚为什么我的设置不起作用;然而你是完全正确的。这个改变让我完全跳过CASE,现在它正常工作。谢谢! – RoyalGoat