|
|
我的答案
为方便阅读故,复杂的SQL被写成view
一、建立一个表:
SQL> desc test2
名称 是否为空? 类型
----------------------------------------- -------- -----------
RQ DATE
INCOME NUMBER(9)
OUTCOME NUMBER(9
二、插入三笔数据
RQ INCOME OUTCOME
---------- ---------- ----------
01-3月 -00 50 30
02-3月 -00 45 60
05-3月 -00 60 10
三、第一个答案
create view result1(seq,rq,income,outcome,balance) as
select t1.row1,t1.rq,t1.income,t1.outcome,sum(t2.dif2) from
(select rownum row1,rq,income,outcome,income-outcome dif1 from test2) t1,
(select rownum row2,rq,income-outcome dif2 from test2) t2
where t1.row1 >= t2.row2
group by t1.row1,t1.rq,t1.income,t1.outcome
这个view就是答案
四、第二个答案
首先,插入一笔数据
RQ INCOME OUTCOME
---------- ---------- ----------
05-3月 -00 60 10
然后
create view result2(rq,income,outcome,balance) as
select t3.rq,sum(t3.income),sum(t3.outcome),max(dif3) from
(
select t1.row1,t1.rq,t1.income,t1.outcome,sum(t2.dif2) dif3 from
(select rownum row1,rq,income,outcome,income-outcome dif1 from test2) t1,
(select rownum row2,rq,income-outcome dif2 from test2) t2
where t1.row1 >= t2.row2
group by t1.row1,t1.rq,t1.income,t1.outcome
) t3
group by t3.rq
就是答案二
五、第三个答案
先建立一个可以生成连续日期序列的view
create view test2_date_seq as
select (select min(rq) from test2)+rownum-1 rq from all_objects where rownum<=(select max(rq)-min(rq)+1 from test2)
再建立一个view
create or replace view test2_ext as
select t2.rq,nvl(t1.income,0) income,nvl(t1.outcome,0) outcome from test2 t1,test2_date_seq t2
where t2.rq=t1.rq(+)
再建立地三个view,也是答案
create view result3(rq,income,outcome,balance) as
select t3.rq,sum(t3.income),sum(t3.outcome),max(dif3) from
(
select t1.row1,t1.rq,t1.income,t1.outcome,sum(t2.dif2) dif3 from
(select rownum row1,rq,income,outcome,income-outcome dif1 from test2_ext) t1,
(select rownum row2,rq,income-outcome dif2 from test2_ext) t2
where t1.row1 >= t2.row2
group by t1.row1,t1.rq,t1.income,t1.outcome
) t3
group by t3.rq |
|