【发布时间】:2015-02-09 20:49:03
【问题描述】:
不确定这是不是正确的标题。我需要找到cumulative multiplication,就像运行总数一样。
搜索了论坛,得到了一个很好的answer。但这不是我的确切答案。
所以修改了我的要求的答案。
SELECT *,
(SELECT CASE
WHEN Min(Abs(Column1)) = 0 THEN 0
ELSE Exp(Sum(Log(Abs(NULLIF(Column1, 0))))) -- the base mathematics
* Round(0.5 - Count(NULLIF(Sign(Sign(Column1) + 0.5), 1))%2, 0) -- pairs up negatives
END
FROM TEMP a
WHERE B.ID >= A.ID) as Running_Mul
FROM TEMP B
我得到了答案。现在Sql Server 2008 有没有更好的方法来做到这一点?
样本数据:
ID Column1
-- -------
1 1
2 2
3 4
4 8
5 -2
预期结果:
ID Column1 Running_Mul
-- ------- -----------
1 1 1
2 2 2
3 4 8
4 8 64
5 -2 -128
【问题讨论】:
标签: sql sql-server sql-server-2008 tsql