2016-09-21 4 views
1

У меня есть таблица Cycles, как это:Создание представления на нескольких условий строк

Value Name Month 

10 P00006 201412 
20 P00006 201501 
30 P00006 201502 
100 P00007 201509 
200 P00007 201510 
300 P00007 201511 

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

AccruedValue Name Month 

10 P00006 201412 
30 P00006 201501 
60 P00006 201502 
100 P00007 201509 
300 P00007 201510 
600 P00007 201511 

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

ответ

2

Тестовые данные:

create table cycles 
(value NUMBER, name VARCHAR2(250), month VARCHAR2(250)); 
/
INSERT INTO cycles VALUES(10 , 'P00006','201412'); 
INSERT INTO cycles VALUES(20 , 'P00006','201501'); 
INSERT INTO cycles VALUES(30 , 'P00006','201502'); 
INSERT INTO cycles VALUES(100 , 'P00007','201509'); 
INSERT INTO cycles VALUES(200 , 'P00007','201510'); 
INSERT INTO cycles VALUES(300 , 'P00007','201511'); 

Просмотр my_view:

create or replace view my_view as 
select 
    sum(value) over (partition by name order by month) as AccruedValue , 
    name , 
    month 
from cycles; 

Результат:

select * from v; 

10 P00006 201412 
30 P00006 201501 
60 P00006 201502 
100 P00007 201509 
300 P00007 201510 
600 P00007 201511 
+0

вид возврата точное тот же результат, как вы показать, как ожидаемый результат в вашем вопросе – schurik

+0

Оправдания меня ты прав :). Огромное спасибо за вашу помощь. Эта тема закрыта – saad0n87

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