oracle有数据表是T
DYEARMONTH PK_CORP CWAREHOUSEID CINVENTORYID            CINVBASID VAR
2012-04 1002 1002F8100000000003ZA 0001A210000000008K16 0001F8100000000009ZZ 70
2012-05 1002 1002F8100000000003ZA 0001A210000000008K16 0001F8100000000009ZZ -25
2012-06 1002 1002F8100000000003ZA 0001A210000000008K16 0001F8100000000009ZZ -10
2012-07 1002 1002F8100000000003ZA 0001A210000000008K16 0001F8100000000009ZZ 72
2012-08 1002 1002F8100000000003ZA 0001A210000000008K16 0001F8100000000009ZZ -3
2012-09 1002 1002F8100000000003ZA 0001A210000000008K16 0001F8100000000009ZZ -37
2012-10 1002 1002F8100000000003ZA 0001A210000000008K16 0001F8100000000009ZZ -27
2012-11 1002 1002F8100000000003ZA 0001A210000000008K16 0001F8100000000009ZZ -17
2012-12 1002 1002F8100000000003ZA 0001A210000000008K16 0001F8100000000009ZZ 91
2013-01 1002 1002F8100000000003ZA 0001A210000000008K16 0001F8100000000009ZZ -47现在想有一个类似递归的形式,以DYEARMONTH为条件,如2012-04这条数据VAR的值是本身(70),2012-05的数据为
2012-04的var+上2012-05的var,70+(-25),一下类似,重新整理输出数据
结果如:
2012-04 1002 1002F8100000000003ZA 0001A210000000008K16 0001F8100000000009ZZ 70
2012-05 1002 1002F8100000000003ZA 0001A210000000008K16 0001F8100000000009ZZ 45
2012-06 1002 1002F8100000000003ZA 0001A210000000008K16 0001F8100000000009ZZ 35
2012-07 1002 1002F8100000000003ZA 0001A210000000008K16 0001F8100000000009ZZ 107
。。求高手解决,在线等,谢谢!!!

解决方案 »

  1.   


    create table tabT
    (DYEARMONTH varchar(10), 
     PK_CORP varchar(6), 
     CWAREHOUSEID varchar(30), 
     CINVENTORYID varchar(30),
     CINVBASID varchar(30),
     VAR int)insert into tabT
     select '2012-04', '1002', '1002F8100000000003ZA', '0001A210000000008K16', '0001F8100000000009ZZ', 70 union all
     select '2012-05', '1002', '1002F8100000000003ZA', '0001A210000000008K16', '0001F8100000000009ZZ', -25 union all
     select '2012-06', '1002', '1002F8100000000003ZA', '0001A210000000008K16', '0001F8100000000009ZZ', -10 union all
     select '2012-07', '1002', '1002F8100000000003ZA', '0001A210000000008K16', '0001F8100000000009ZZ', 72 union all
     select '2012-08', '1002', '1002F8100000000003ZA', '0001A210000000008K16', '0001F8100000000009ZZ', -3 union all
     select '2012-09', '1002', '1002F8100000000003ZA', '0001A210000000008K16', '0001F8100000000009ZZ', -37 union all
     select '2012-10', '1002', '1002F8100000000003ZA', '0001A210000000008K16', '0001F8100000000009ZZ', -27 union all
     select '2012-11', '1002', '1002F8100000000003ZA', '0001A210000000008K16', '0001F8100000000009ZZ', -17 union all
     select '2012-12', '1002', '1002F8100000000003ZA', '0001A210000000008K16', '0001F8100000000009ZZ', 91 union all
     select '2013-01', '1002', '1002F8100000000003ZA', '0001A210000000008K16', '0001F8100000000009ZZ', -47
    select a.DYEARMONTH,
           a.PK_CORP,
           a.CWAREHOUSEID,
           a.CINVENTORYID,
           a.CINVBASID,
           isnull((select sum(b.VAR) from tabT b
            where datediff(m,b.DYEARMONTH+'-01',a.DYEARMONTH+'-01')>0),0)+a.VAR 'VAR'
     from tabT a/*
    DYEARMONTH PK_CORP CWAREHOUSEID                   CINVENTORYID                   CINVBASID                      VAR
    ---------- ------- ------------------------------ ------------------------------ ------------------------------ -----------
    2012-04    1002    1002F8100000000003ZA           0001A210000000008K16           0001F8100000000009ZZ           70
    2012-05    1002    1002F8100000000003ZA           0001A210000000008K16           0001F8100000000009ZZ           45
    2012-06    1002    1002F8100000000003ZA           0001A210000000008K16           0001F8100000000009ZZ           35
    2012-07    1002    1002F8100000000003ZA           0001A210000000008K16           0001F8100000000009ZZ           107
    2012-08    1002    1002F8100000000003ZA           0001A210000000008K16           0001F8100000000009ZZ           104
    2012-09    1002    1002F8100000000003ZA           0001A210000000008K16           0001F8100000000009ZZ           67
    2012-10    1002    1002F8100000000003ZA           0001A210000000008K16           0001F8100000000009ZZ           40
    2012-11    1002    1002F8100000000003ZA           0001A210000000008K16           0001F8100000000009ZZ           23
    2012-12    1002    1002F8100000000003ZA           0001A210000000008K16           0001F8100000000009ZZ           114
    2013-01    1002    1002F8100000000003ZA           0001A210000000008K16           0001F8100000000009ZZ           67(10 row(s) affected)
    */
      

  2.   

    大神,select a.DYEARMONTH,
           a.PK_CORP,
           a.CWAREHOUSEID,
           a.CINVENTORYID,
           a.CINVBASID,
           isnull((select sum(b.VAR) from tabT b
            where datediff(m,b.DYEARMONTH+'-01',a.DYEARMONTH+'-01')>0),0)+a.VAR 'VAR'
     from tabT a这段SQL,在oracle里执行有错啊,datediff好像是sqlserver的函数吧。。
      

  3.   

    try this,select a.DYEARMONTH,
           a.PK_CORP,
           a.CWAREHOUSEID,
           a.CINVENTORYID,
           a.CINVBASID,
           nvl((select sum(b.VAR) from tabT b
                where TO_DATE(b.DYEARMONTH+'-01','YYYY-MM-DD')-TO_DATE(a.DYEARMONTH+'-01','YYYY-MM-DD')<0),0)+a.VAR 'VAR'
     from tabT a