Используйте оператор MERGE
с аналитической функцией SUM
:
SQL Fiddle
Настройка схемы Oracle 11g R2 :
CREATE TABLE table_name ( year, initial_balance, net_01, net_02, net_03, net_04 ) AS
SELECT 2013, 0, 100, 100, 100, 100 FROM DUAL UNION ALL
SELECT 2014, 0, -200, 100, 100, 100 FROM DUAL UNION ALL
SELECT 2015, 0, -300, 100, 100, 100 FROM DUAL UNION ALL
SELECT 2016, 0, 0, 0, 0, 0 FROM DUAL UNION ALL
SELECT 2017, 0, 0, 0, 0, 0 FROM DUAL;
Запрос 1 :
MERGE INTO table_name dst
USING (
SELECT ROWID rid,
SUM( net_01 + net_02 + net_03 + net_04 )
OVER (
ORDER BY year
ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
) AS initial_balance
FROM table_name
) src
ON ( dst.ROWID = src.RID )
WHEN MATCHED THEN
UPDATE SET
initial_balance = COALESCE( src.initial_balance, 0 )
Результаты : Запрос 2 :
SELECT * FROM table_name
Результаты :
| YEAR | INITIAL_BALANCE | NET_01 | NET_02 | NET_03 | NET_04 |
|------|-----------------|--------|--------|--------|--------|
| 2013 | 0 | 100 | 100 | 100 | 100 |
| 2014 | 400 | -200 | 100 | 100 | 100 |
| 2015 | 500 | -300 | 100 | 100 | 100 |
| 2016 | 500 | 0 | 0 | 0 | 0 |
| 2017 | 500 | 0 | 0 | 0 | 0 |