Обновить Closing_Balance на основе предыдущего значения строки - PullRequest
0 голосов
/ 27 октября 2018

У меня есть таблица, которая содержит следующие столбцы: ID, Opening_Balnce и Closing Balance.Это существующая таблица, поддерживаемая нашими клиентами, и OB ссылается на сумму, которую необходимо добавить / вычесть к предыдущей строке cb. Например, если я получу 100 rs от поставщика, тогда мне нужно добавить 100 как ob и 600 как cb.

   ID   OB    CB
   ===============
    1   100   100
    2   100   200
    3   100   300
    4   100   400
    5   -100  300
    6   100   400
    7   100   500
    8   -100  400

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

Например, я собираюсь обновить OB = 200 для идентификатора= 4, поэтому вывод должен быть следующим:

   ID   OB    CB
   ===============
    1   100   100
    2   100   200
    3   100   300
    4   200   500
    5   -100  400
    6   100   500
    7   100   600
    8   -100  500

Я пробовал следующую попытку sql, которая не работает в один выстрел

UPDATE A 
SET OB = 200, CB = OB + PrevCB
FROM A JOIN (SELECT LAG(CB) OVER (ORDER BY ID)PrevCB, ID FROM A) X ON A.ID = X.ID 
WHERE A.ID = 4;

UPDATE A
SET CB = OB + PrevCB
FROM A JOIN (SELECT LAG(CB) OVER (ORDER BY ID)PrevCB, ID FROM A) X ON A.ID = X.ID 
WHERE A.ID > 4;

1 Ответ

0 голосов
/ 27 октября 2018

Вы можете попробовать использовать SUM оконную функцию.

UPDATE T 
SET OB = 200
FROM T 
WHERE ID = 4;

UPDATE T
SET CB = val + (SELECT CB FROM T WHERE ID = 3)
FROM T JOIN (
    SELECT SUM(OB) over(order by ID) val, ID 
    FROM T
    WHERE ID > 3
) X ON T.ID = X.ID 

sqlfiddle

Результат

 ID   OB    CB
 ===============
    1   100   100
    2   100   200
    3   100   300
    4   200   500
    5   -100  400
    6   100   500
    7   100   600
    8   -100  500
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...