2016-09-23 58 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