【问题标题】:SQL Case Value SwitchingSQL 案例值切换
【发布时间】:2015-06-17 19:39:33
【问题描述】:

我正在从另一个表中传递一系列从 -1 到 1 的双精度值。如果值为正,我想让它成为它与 1 之间的差异(即 0.2 将变为 0.8)。如果值为负数,我希望它是现在大于 1 的 delta 负数(即 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

【问题讨论】:

  • delta的数据类型是什么?
  • 你的例子是想要的结果,还是错误的结果?
  • 双;这是不正确的 - D Stanley 的观察让我完全避免了它。

标签: sql select case


【解决方案1】:

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

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

如果Delta 为正数,则会从 1 中减去:

(1 - Delta)

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

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

【讨论】:

  • 还没弄清楚为什么我的设置不起作用;但是你是完全正确的。这种变化让我完全跳过了 CASE,现在它可以正常工作了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多