Петрелевич Сергей
В этой статье показаны различные практические примеры применения аналитических функций Oracle.
Таблица с нарастающим итогом
Подготовка тестовых данных.
Допустим, у нас есть таблица проводок по счетам и мы хотим получить баланс после совершения каждой проводки, т.е. нам надо к стартовой сумме прибавить или вычесть сумму первой проводки, к полученной сумме добавить или вычесть сумму второй и т.д. Другими словами, накапливать результат.
В стандартном SQL эта задача не решается, т.к. надо в какой-то переменной хранить сумму, но это можно сделать аналитической функцией Oracle.
Тестовые данные:
create table tBalance
(
id number,
account varchar2(20),
value number
);
insert into tBalance values (1,'01',100);
insert into tBalance values (2,'01',200);
insert into tBalance values (3,'01',-100);
insert into tBalance values (4,'01',200);
insert into tBalance values (5,'01',100);
insert into tBalance values (6,'01',-100);
insert into tBalance values (7,'01',100);
insert into tBalance values (8, '02',10);
insert into tBalance values (9, '02',20);
insert into tBalance values (10,'02',-10);
insert into tBalance values (11,'02',-20);
insert into tBalance values (12,'02',10);
insert into tBalance values (13,'02',-10);
insert into tBalance values (14,'02',10);
И сам запрос:
select t.*, sum(t.value) OVER (PARTITION BY t.account order by t.id) as itogo
from tBalance t
Все более чем просто.
Разделяем проводки по счетам, сортируем по Id и считаем сумму.
P.S. Продолжение следует...
Ссылки по теме