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)
我正在从另一个 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)