我正在尝试从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
部分。
关于实现这种逻辑的最佳方法的想法?
答案 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;