我从另一个表中传递一系列范围从 -1 到 1 的 double 值。如果该值为正数,我想将其设为它与 1 之间的差值(即 0.2 将变为 0.8)。如果 value 为负数,我希望它现在的 delta 负值大于 1(即 0.2 将是 1.2)。
出于某种原因,当我这样做时,它会从上一个表中获取值并使它们符合第一个“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)
关于SQL 大小写值切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30900884/