2016-09-23 47 views
-1

下一行我有几个字段的表像下面更新当前和表

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 
+0

什么是正在使用的sql服务器版本? –

+0

@vkp 12.0.5000.0 – Keppy

+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 
1
update tablename set openingbalance=a.clcurrentrow from 
(select LAG(closingbalance) over (order by id) clcurrentrow from tablename) a 
+0

如果您发现它有用,请将其标记为答案 – Ashu

+0

这是有用的,但不是答案。 :) – Keppy