值减去先前行值的总和SQL

时间:2017-12-01 09:43:30

标签: sql amazon-redshift

我有一张看起来像这样的表:

+---------+--------+-------+
|categ    |decrea  |lost   |
|---------|--------|-------+
|A        |1500    |20     |
|B        |1500    |40     |
|C        |1500    |60     |
+---------+--------+-------+

我想改变减量值,使每个值等于减少累计损失。结果如下:

+---------+---------------+-------+
|categ    |decrea         |lost   |
|---------|---------------|-------+
|A        |1500-20        |20     |
|B        |1500-(20+40)   |40     |
|C        |1500-(20+40+60)|60     |
+---------+--------+------+-------+

Anay帮忙吗?

3 个答案:

答案 0 :(得分:0)

尝试使用自联接方法:

SELECT
    t1.categ,
    t1.decrea - SUM(t2.lost) AS decrea,
    t1.lost
FROM yourTable t1
INNER JOIN yourTable t2
    ON t1.categ >= t2.categ
GROUP BY
    t1.categ, t1.decrea, t1.lost
ORDER BY
    t1.categ;

Results:
  categ decrea lost
1 A     1480   20
2 B     1440   40
3 C     1380   60

Demo

答案 1 :(得分:0)

尝试使用SQL Server。

DECLARE @Table TABLE(categ varchar(1),decra INT, lost int)
INSERT INTO @Table VALUES('A',1500,20)
INSERT INTO @Table VALUES('B',1500,40)
INSERT INTO @Table VALUES('C',1500,60)

SELECT *
    ,decra-SUM(lost) OVER(ORDER BY categ) Accumulated
FROM @Table

<强>输出

categ   decra   lost    Accumulated
A       1500    20      1480
B       1500    40      1440
C       1500    60      1380

答案 2 :(得分:0)

使用以下相关查询

DECLARE @Table TABLE(categ varchar(1),decra INT, lost int)

INSERT INTO @Table VALUES('A',1500,20)

INSERT INTO @Table VALUES('B',1500,40)

INSERT INTO @Table VALUES('C',1500,60)

SELECT *,    
    decra -
        (SELECT SUM(t2.lost) FROM @Table t2 WHERE t2.categ <= t1.categ) AS decra,
    lost
FROM @Table t1;