SQL 大小写值切换

SQL Case Value Switching

我正在从另一个 table 传递一系列从 -1 到 1 的双精度值。如果该值为正数,我想让它与 1 之间的差值(即 0.2 会然后变成.8)。如果值为负,我希望它现在是大于 1 的负增量(即 0.2 将是 1.2)。

出于某种原因,当我这样做时,它从之前的 table 中获取值并使它们符合第一个 WHEN 的条件(因此在此设置中,所有传入的值都被生成积极并击中第一个 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

我不确定你为什么会看到现在的结果,但从数学上讲,你的预期结果只是 1 - Delta:

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

如果 Delta 为正数,它将从 1 中减去:

(1 - Delta)

如果Delta为负数,绝对值将加1:

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