2015-06-17 107 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