关于这个问题不好怎么描述,具体请各位大牛看下面的数据就很清晰了:时期 公司编码 银行编码 流入 流出
20110000 1001 10 1000 0
20121210 1001 10 20 30
20121211 1001 10 30 100
20110000 1002 12 800 0
20121218 1002 12 100 90
20121219 1002 12 200 100对于上面的数据需要统计出期初及期末
规则是:
1、对于时期后4为是0000的表示期初时期,他的期初数就是这个时期的流入数,期末数也是流入数
2、对于其他时期不同公司不同银行的期初等于上个时期的期末数,它的期末数为这个时期的期初数加上流入数减去流出数如下所示:时期 公司编码 银行编码 期初数 流入 流出 期末数
20110000 1001 10 1000 1000 0 1000
20121210 1001 10 1000 20 30 990
20121211 1001 10 990 30 100 920
20110000 1002 12 800 800 0 800
20121218 1002 12 800 100 90 810
20121219 1002 12 810 200 100 910

解决方案 »

  1.   

    这样的话,很简单,就是你后面加个字段,字段间数字相减就可以了。
    select 时期, 公司编码, 银行编码, 期初数, 流入, 流出,期初数+流入-流出 AS 期末数  FROM TABLENAME
      
      

  2.   

    to bin3509 问题是期初数等于上个时期的期末数啊,这样才能算出本时期的期末数。
      

  3.   

    TB 你的表……
    select tb.*,sum(流入- 流出)over(partition by 公司编码,银行编码 order by 时期 asc) from tb
      

  4.   


    with t as (
    select '20110000' a , '1001' b, '10' c, 1000 d, 0 e from dual
    union all
    select '20121210' a , '1001' b, '10' c, 20 d, 30 e from dual
    union all
    select '20121211' a , '1001' b, '10' c, 30 d, 100 e from dual
    union all
    select '20110000' a , '1002' b, '12' c, 800 d, 0 e from dual
    union all
    select '20121218' a , '1002' b, '12' c, 100 d, 90 e from dual
    union all
    select '20121219' a , '1002' b, '12' c, 200 d, 100 e from dual
    )
    select tt.a,tt.b,tt.c,decode(substr(tt.a,-4),'0000',tt.d,lag(tt.m) over(partition by tt.b,tt.c order by tt.a)),tt.d,tt.e,tt.m
    from (
    select t.a,t.b,t.c,t.d,t.e,sum(t.d-t.e)over(partition by t.b,t.c order by t.a) m from t ) tt
      

  5.   

    实测数据:CREATE TABLE T131
    (
        Period VARCHAR2(20),
        CompCode VARCHAR2(20),
        BankCode VARCHAR2(20),
        InFlow  NUMBER(6),
        OutFlow NUMBER(6)
    );INSERT INTO T131 VALUES('20110000', '1001', '10', 1000, 0);
    INSERT INTO T131 VALUES('20121210', '1001', '10', 20, 30);
    INSERT INTO T131 VALUES('20121211', '1001', '10', 30, 100);INSERT INTO T131 VALUES('20110000', '1002', '12', 800, 0);
    INSERT INTO T131 VALUES('20111218', '1002', '12', 100, 90);
    INSERT INTO T131 VALUES('20111219', '1002', '12', 200, 100);
    实测结果: