不知道你要做插入还是更新,也不知道你实现这个功能时,年度月份是已知还是未知,已知就简单了,未知的话,要先得到做到年月份,这样不知道满足你的要求不insert into tab1 (年度 月份 资产编号 资产名称 余额
) select '2004',月份+1,资产编号,资产名称,余额+1000 from tab1 where 月份=10 and 资产编号='111'或 月份=(select max(月份) from tab1)
) select '2004',月份+1,资产编号,资产名称,余额+1000 from tab1 where 月份=10 and 资产编号='111'或 月份=(select max(月份) from tab1)
SQL> Insert Into zc Values('2004','10','111','AAA',5000);1 行 已插入SQL> Insert Into zc Values('2004','10','222','bbb',3000);1 行 已插入SQL> Insert Into zc Values('2004','10','111','AAA',1000);1 行 已插入SQL> Insert Into zc Values('2004','11','111','AAA',5000);1 行 已插入SQL> select * from zc;ND YF ZCBH ZCMC SHY
---------- ----- ---------- -------------------- -----------
2004 10 111 AAA 5000
2004 10 222 bbb 3000
2004 10 111 AAA 1000
2004 11 111 AAA 5000SQL>
SQL> Select zcmc, yf,
2 Sum(shy) As 总数,
3 Sum(Sum(shy)) Over(Order By yf Rows Unbounded Preceding) As 累计总数
4 From zc
5 Group By yf,zcmc
6 ;ZCMC YF 总数 累计总数
-------------------- ----- ---------- ----------
AAA 10 6000 6000
bbb 10 3000 9000
AAA 11 5000 14000SQL>
group by 月份,资产编号
这是我已建好的一个视图,源数据来自四张表,
年度 月份 资产编号 资产名称 余额
...2004 9 222 bbb 2000
2004 10 111 AAA 5000
2004 10 222 bbb 3000
2004 11 111 AAA 1000
...在此基础上要得到如下结果,可以用视图实现年度 月份 资产编号 资产名称 余额
...2004 9 222 bbb 2000
2004 10 111 AAA 5000
2004 10 222 bbb 5000
2004 11 111 AAA 6000
...“2004 10 222 bbb 5000”中5000=2000+3000,
“2004 11 111 AAA 6000”中6000=5000+1000。
Drop Table test;
Create Table test (a Number ,b Number ,c Number ,d varchar2(10),e Number);
Insert Into test Values(2004, 9, 222 ,'bbb', 2000);
Insert Into test Values(2004, 10, 111 ,'AAA', 5000);
Insert Into test Values(2004, 10, 222 ,'bbb', 3000);
Insert Into test Values(2004, 11, 111 ,'AAA', 1000);
Insert Into test Values(2004, 12, 111 ,'AAA', 1000);
Insert Into test Values(2004, 12, 111 ,'bbb', 1000);Select X.a,X.b,X.c,X.d,x.e+sum(nvl(y.e,0)) From test X,test Y Where X.d=Y.d(+) And X.B>Y.B(+)
Group By X.a,X.b,X.c,X.d,x.e Order By 2 2004 9 222 bbb 2000
2004 10 111 AAA 5000
2004 10 222 bbb 5000
2004 11 111 AAA 6000
2004 12 111 AAA 7000
2004 12 111 bbb 6000
好像和我的例子是一样的呀:
看结果:
2004 9 222 bbb 2000
2004 10 111 AAA 5000 (3000+2000)
2004 10 222 bbb 5000
2004 11 111 AAA 6000 (1000+5000)
2004 12 111 AAA 7000 (1000+1000+5000)
where a.年度=b.年度(+) and a.月份>b.月份(+) and a.资产编号=b.资产编号(+)
group by a.年度,a.月份,a.资产编号,a.资产名称,a.余额
(
select to_date(年度||月份,'yyyymm') 年月,tb.* from tb
) a,
(
select to_date(年度||月份,'yyyymm') 年月,tb.* from tb
) b
where a.年月>b.年月(+) and a.资产编号=b.资产编号(+)
group by a.年度,a.月份,a.资产编号,a.资产名称,a.余额
的思路和我的例子是一回事,楼主自己再想想吧。:)