减去同一列中的字段以获取间隔

时间:2011-09-21 13:24:50

标签: sql-server sql-server-2005 tsql sql-server-2008

我有一个表“@ table1”,我想通过RowID递归更新从BOTTOM到TOP排序的“Amount”列。如果最终结果仍为负值,则将负值减去上面行的值,将该值减去下一行,将前一个值替换为0.

 DECLARE @table1 TABLE (RowID int, Amount int);
    INSERT @table1 VALUES 
    (1,20),
    (2,10),
    (3,-10),
    (4,10),
    (5,-5),
    (6,30);
Select * from @table1


RowID       Amount
----------- -----------
1           20
2           10
3           -10
4           10
5           -5
6           30

结果表

DECLARE @table1 TABLE (RowID int, Amount int);
    INSERT @table1 VALUES 
    (1,20),
    (2,0),
    (3,0),
    (4,5),
    (5,0),
    (6,30); 
Select * from @table1


RowID       Amount
----------- -----------
1           20
2           0
3           0
4           5
5           0
6           30

1 个答案:

答案 0 :(得分:1)

我能想到实现这个(作为单个查询)的唯一方法是使用running total 之类的东西。这有效地最终加入了Product表格,使得对于“left”表中的每一行,“right”表包含“在它之前”的所有记录。这样,您可以保持更新字段的运行总计。不幸的是,编写和执行非常混乱。

根据您的预期使用场景,这可能是游标更好的替代方案之一。使用游标和表变量编写一个应该是相对微不足道的。