SQL Server - 使用0 CASE计算百分比变化

时间:2012-03-28 18:32:25

标签: sql-server

我正在尝试从2列计算百分比变化。由于在除以0时会出现错误,我想创建一个CASE来自动处理0,然后处理非零。

我想要实现的行为是: 如果StartValue为0,则可能的结果为0或1(因为当前值为正或保持不变)。 如果StartValue不为0,则获取百分比更改,但将结果限制在-1和+1之间。

UPDATE #Temp
SET ValueChange = 
CASE 
    WHEN StartValue = 0 THEN (CASE
        WHEN CurrentValue = 0 THEN 0
        WHEN CurrentValue > 1 THEN 1
        ELSE 0
        END)
    ELSE 
    WHEN ((CurrentValue - StartValue)/StartValue) > 1 THEN 1
    WHEN ((CurrentValue - StartValue)/StartValue) < -1 THEN -1
    ELSE ((CurrentValue - StartValue)/StartValue)
END;

当我运行此查询时,我收到此错误: Incorrect syntax near the keyword 'WHEN'.,引用代码的WHEN ((CurrentValue - StartValue)/StartValue) > 1 THEN 1部分。

关于实现这种逻辑的最佳方法的想法?

1 个答案:

答案 0 :(得分:1)

正确的语法应该是:

UPDATE Temp
SET ValueChange = 
  CASE 
    WHEN StartValue = 0 THEN (
      CASE
        WHEN CurrentValue = 0 THEN 0
        WHEN CurrentValue > 1 THEN 1
        ELSE 0
      END)
    ELSE 
      CASE 
        WHEN ((CurrentValue - StartValue)/StartValue) > 1 THEN 1
        WHEN ((CurrentValue - StartValue)/StartValue) < -1 THEN -1
        ELSE ((CurrentValue - StartValue)/StartValue)
      END
  END;