不知道你要做插入还是更新,也不知道你实现这个功能时,年度月份是已知还是未知,已知就简单了,未知的话,要先得到做到年月份,这样不知道满足你的要求不insert into tab1 (年度  月份  资产编号  资产名称  余额
) select '2004',月份+1,资产编号,资产名称,余额+1000 from tab1 where 月份=10 and 资产编号='111'或 月份=(select max(月份) from tab1)

解决方案 »

  1.   

    不太理解,但一句SQL似乎很难实现~~,即使实现,随着功能需求的变化也很难维护,建议用存储过程
      

  2.   

    不知你要的是不是这个结果.
    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>
      

  3.   

    select 年度 ,月份,资产编号 , 资产名称 ,(select sum(余额) from table b where b.年度<=a.年度 and b.月份<a.月份) as 余额数 from table a可能在速度上不行,建议用存储过程或程序来实现。
      

  4.   

    select 月份,资产编号,sum(余额) from tableName
    group by 月份,资产编号
      

  5.   

    感谢各位大虾的热心。
    这是我已建好的一个视图,源数据来自四张表,
    年度 月份 资产编号 资产名称 余额
    ...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。
      

  6.   

    做了个例子,看看是不是楼主想要的
    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
      

  7.   

    又看了一下你的问题,
    好像和我的例子是一样的呀:
    看结果:
    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)
      

  8.   

    select a.年度,a.月份,a.资产编号,a.资产名称,a.余额+sum(nvl(b.余额,0)) 余额 from tb a,tb b 
    where a.年度=b.年度(+) and a.月份>b.月份(+) and a.资产编号=b.资产编号(+)
    group by a.年度,a.月份,a.资产编号,a.资产名称,a.余额
      

  9.   

    select a.年度,a.月份,a.资产编号,a.资产名称,a.余额+sum(nvl(b.余额,0)) 余额 from
    (
       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.余额
      

  10.   

    ORARichard(没钱的日子好难过啊)
    的思路和我的例子是一回事,楼主自己再想想吧。:)
      

  11.   

    hippie1024(痞子),你的语句中好象少了个条件