我在Server中有一个表,如下所示。我正在从value和prevvalue列中计算百分比变化
CREATE TABLE temp
(
[date] varchar(7),
[name] varchar(1),
[value] int,
[prevvalue] int
)
INSERT INTO temp ([date], [name], [value], [prevvalue])
VALUES
('2018-10', 'A', 10, 23),
('2018-09', 'B', 45, 23),
('2018-10', 'C', 55, 11),
('2018-10', 'D', 0, 23),
('2018-09', 'D', 22, 0)这是我的问题。我使用CASE WHEN处理除以零的问题。
SELECT
[date],
[name],
[value],
[prevvalue],
CASE
WHEN [prevvalue] = 0
THEN ([value] - [prevvalue]) / ([prevvalue] + 1)
ELSE ([value] - [prevvalue]) / [prevvalue]
END AS pctChangFromLast
FROM
temp 然而,我得到的结果是:
date name value prevvalue pctChangFromLast
-------------------------------------------------------
2018-10 A 10 23 0.00000000000000
2018-09 B 45 23 0.00000000000000
2018-10 C 55 11 4.00000000000000
2018-10 D 0 23 -1.00000000000000
2018-09 D 22 0 2200.00000000000000第1、2、4行的pctChangFromLast不正确。我做错什么了?
发布于 2020-04-13 22:18:41
我建议nullif()避免除以零.那么你的问题就是整数除法。在Server中,3/2 = 1,而不是1.5。
我通过乘以1.0来解决这个问题:
([value] - [prevvalue]) * 1.0 / nullif([prevvalue], 0) AS pctChangFromLast 这将返回NULL,而不是当前一个值为0时返回一些惊人的数字。
https://stackoverflow.com/questions/61197711
复制相似问题