Расчет данных в столбце непрерывно из года в год - PullRequest
0 голосов
/ 07 июня 2018

Мне нужна ваша помощь. Мне нужно рассчитать данные в моем столбце следующим образом.

вот так

Как рассчитать данные в исходном балансе столбца?

В столбце начального баланса данные рассчитываются по net_01 до тех пор, пока net_04 не будет вычисляться непрерывно из года в год.

В настоящее время я работаю над Oracle 12c.Есть ли какая-либо функция для достижения этой цели?

Любая помощь будет оценена, спасибо.

1 Ответ

0 голосов
/ 07 июня 2018

Используйте оператор 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 |
...