2016-09-23 6 views
-1

У меня есть таблица с несколькими полями, как показано нижеОбновление текущей и следующей строки в таблице

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

Здесь открытие сальдо текущего дня закрытия баланса предыдущего дня и закрытия баланса вычисляется по формуле

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

, но текущие данные неверны в этой таблице из-за неправильной формулы, примененной ранее для баланса закрытия. Я пробовал, как перебирать все записи этой таблицы и обновлять баланс закрытия до фактического значения. Я хочу обновить баланс открытия следующей строки с остатком закрытия текущей строки в этом курсоре, но у меня нет идентификатора следующей строки. Есть предположения?

Фактический результат:

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

Смежные вопросы