更新表格中的当前行和下一行

时间:2016-09-23 12:52:24

标签: sql sql-server database

我的表格中包含以下几个字段

ID | OpeningBal | A | B | C | D | ClosingBal

此处当日的期初余额为前一天的期末余额,期末余额按此公式计算

OpeningBal + A - B - (C + D) - C

但是此表中的当前数据是错误的,因为先前为结算余额应用了错误的公式。我试图循环遍历此表的所有记录,并将期末余额更新为实际值。我想用这个游标中当前行的结束余额来更新下一行的期初余额,但我没有下一行的ID。有什么想法吗?

实际结果:

ID  OPBal  A   B  C  D  CLBal
1   0      80  4  6  0  90
2   90     8   6  0  0  104
5   104    5   4  0  9  122
7   122    10  3  5  0  140

预期结果:

ID  OPBal  A   B  C  D  CLBal
1   0      80  4  6  0  64
2   64     46  6  0  0  104
5   104    5   4  0  9  96
7   96     10  3  5  0  93

2 个答案:

答案 0 :(得分:1)

update tablename set openingbalance=a.clcurrentrow from
(select LAG(closingbalance) over (order by id) clcurrentrow  from tablename ) a

答案 1 :(得分:0)

谢谢大家。我使用LAG获得了解决方案,我将根据我的要求对其进行修改。

SELECT 
        ID,
        LAG(ClosingBalance,1,0.00)  OVER (ORDER BY ID) PrevClosingBalance,
        ClosingBalance
    FROM Table1  

UPDATE Table1
SET OpeningBalnace = @PrevClosingBalance
ClosingBalance = @PrevClosingBalance + A - B -(C+D)-C
WHERE ID = @ID