表 A 里有如下数。
    收支明细(SZMX)      收入金额 (SRJE)    支出金额(ZCJE)           明细序号(XLH)
     A                   100                   0                          1
     B                   200                   0                          2
     C                   0                     300                        3
     D                   0                     50                         4
     H                   100                   30                         5
     F                   50                    100                        6
     ..                   ..                   ..                         ..
     ..                   ..                   ..                         .. 
     n                    n                    n                          n
  
 写个什么SQL语句。能把表A里的数据写到表里B 并得到下面的数据(表B):
  里面的结存金额=上次的结存金额+收入金额-支出金额   收支明细(SZMX)      收入金额 (SRJE)    支出金额(ZCJE)      结存金额(JCJE)     明细序号(XLH)
    ..                    ..                 ..                1000                 7
    VV                   170                80                 1090                 8 --此行以上是以前的数据。
    A                    100                 0                 1190                 1
    B                    200                 0                 1390                 2
    C                    0                   300               1090                 3
    D                    0                   50                1040                 4
    H                    100                 30                1110                 5
    F                    50                  100               1060                 6
    ..                   ..                   ..               ..                   ..
    ..                   ..                   ..               ..                   ..
    N                    N                    N                N                    N

解决方案 »

  1.   

     表 A 
      收支明细(SZMX)    收入金额 (SRJE)         支出金额(ZCJE)            明细序号(XLH)
      A                    100                     0                            1
      B                    200                     0                            2
      C                    0                       300                          3
      D                    0                       50                           4
      H                    100                     30                           5
      F                    50                      100                          6
      ..                   ..                      ..                           ..
      ..                   ..                       ..                          ..  
      n                    n                        n                            n表B:
      收支明细(SZMX)      收入金额 (SRJE)  支出金额(ZCJE)   结存金额(JCJE)   明细序号(XLH)
      ..                    ..                   ..          1000              7
      VV                    170                  80          1090              8 --此行以上是以前的数据。
      A                     100                   0           1190              1
      B                     200                   0           1390              2
      C                     0                     300         1090              3
      D                     0                     50          1040              4
      H                     100                   30          1110              5
      F                     50                    100         1060              6
      ..                    ..                    ..           ..               ..
      ..                    ..                    ..           ..               ..
      N                     N                      N            N               N
      

  2.   

    要oracle版本还是sqlserver版本?
      

  3.   

    --> 测试数据: #tb
    if object_id('tempdb.dbo.#tb') is not null drop table #tb
    go 
    create table #tb (SZMX varchar(1),SRJE int,ZCJE int,XLH int)
    insert into #tb
    select 'A',100,0,1 union all
    select 'B',200,0,2 union all
    select 'C',0,300,3 union all
    select 'D',0,50,4 union all
    select 'H',100,30,5 union all
    select 'F',50,100,6
    select *,jcje=(select sum(SRJE)-sum(ZCJE) from #tb where XLH<=t.XLH) 
    from #tb tSZMX SRJE        ZCJE        XLH         jcje
    ---- ----------- ----------- ----------- -----------
    A    100         0           1           100
    B    200         0           2           300
    C    0           300         3           0
    D    0           50          4           -50
    H    100         30          5           20
    F    50          100         6           -30(6 行受影响)如果直接导入到b中
     就在前面加个 insert tb select 
      

  4.   

    楼上这样不行的  他b表本身有数据的你要把
    b表的数据 的最后一笔 + 收入金额 (SRJE)- 支出金额(ZCJE)
      

  5.   

    SELECT a.SZMX,sum(a.SRJE) as SRJE,sum(a.ZCJE) as ZCJE,sum(b.JCJE+a.SRJE-a.ZCJE) as JCJE ,a.XLH from a join b on a.SZMX=b.SZMX and a.XLH=b.XLH
    group by  a.SZMX ,a.XLH
      

  6.   

    存放方式很明显了 
    b表原来的数据 的最后一笔的 结存资金
    加上a表下一笔数据的 收入 再减去支出
    这个就是结存资金 
    其他数据 照搬过来。。主要难点是的第一笔数据来源a
    结存资金需要 用到 b的结存资金
      

  7.   

    小弟功底不够,提供一 oracle存储过程 如果存在语法错误。。请见谅 。。
    但是我明白了你的意思 ,我的逻辑应该没错。。
    create or replace procedure test is
      newjczj number; 
    begin
        for rec in(
            select jczj into newjczj from b where rownum=1 order by xlh desc
               insert into b select a.SZMX,a.SRJE,a.ZCJE,(newjczj+a.srje-a.zcje) as JCJE,a.XLH from a
        )loop
        
    end test;
      

  8.   

    才看到没注明啊。我要sqlserver版本的。
      

  9.   

    你稍等会。。我写个给你 刚才我的还是有点逻辑问题 不过差不多了。。
    我里面那个select 不是查一笔数据 是整个a表数据 外面再循环就。不对了。。
      

  10.   

    五楼的水哥。写的很接近我想要的数据了。就是怎么把B表里最后一笔的结存金额也提出,从A表写到。B表里结存金额得包含B表最后一笔的结存金额的。(结存金额=上次的结存金额+收入金额-支出金额)
      

  11.   

    如果非要考虑那么全面的话,你B表最好要加一个自增列,一个标志列(标志是否是本次插入)统计比较方便,而且,本次统计完,A表是不是数据要删掉? 
    如果不删掉,下次再有数据插入到A表,那怎么知道哪些意见统计过,哪些没有统计过。
    这些楼主都没有描述。
      

  12.   

    --> 测试数据: #tb
    if object_id('tempdb.dbo.#tb') is not null drop table #tb
    go 
    create table #tb (SZMX varchar(1),SRJE int,ZCJE int,XLH int)
    insert into #tb
    select 'A',100,0,1 union all
    select 'B',200,0,2 union all
    select 'C',0,300,3 union all
    select 'D',0,50,4 union all
    select 'H',100,30,5 union all
    select 'F',50,100,6if object_id('tempdb.dbo.#ta') is not null drop table #ta
    go 
    create table #ta (SZMX varchar(1),SRJE int,ZCJE int,jcJE int,XLH int)
    insert into #ta
    select 'w',170,80,1090,8   
    insert into #ta
    select SZMX,SRJE,ZCJE, jcje=(select top 1 jcJE  from #ta order by xlh desc)
    +isnull((select sum(SRJE)-sum(ZCJE) from #tb where xlh<=t.xlh),0) 
    ,XLH
    from #tb t
    select * from #ta  SZMX SRJE        ZCJE        jcJE        XLH
    ---- ----------- ----------- ----------- -----------
    w    170         80          1090        8
    A    100         0           1190        1
    B    200         0           1390        2
    C    0           300         1090        3
    D    0           50          1040        4
    H    100         30          1110        5
    F    50          100         1060        6(7 行受影响)
      

  13.   

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    goALTER PROCEDURE [dbo].[test]

    AS
    declare @ajcje int,@number int,@number2 int
    begin
    set @ajcje=(select t.jcje  from(select row_number()  over(order by xlh desc) as num, JCJE from b) t where t.num=1)
    set @number=(select count(*) from a)
    set @number2=0;
    while(@number>@number2)
    begin
    insert into b 
    select t.SRJE,t.ZCJE,t.jcje,t.XLH from
    (select row_number()over(order by xlh desc)as num,
    a.SRJE as SRJE,
    a.ZCJE as ZCJE,
    (@ajcje+a.SRJE-a.ZCJE) as jcje,
    a.XLH as XLH from a) t
    where t.num=@number2 set @number=@number+1
    end

    END我的少用了前面那个字段你自己加下忘记了
      

  14.   

    select *,jcje=(select sum(SRJE)-sum(ZCJE) from #tb where XLH<=t.XLH) 
    from #tb t
    另外问下。这种语法。放在存贮过程里。执行的效率慢不慢啊。在大数据,多用户时候。
      

  15.   

    水哥和OULINHNZZ 两位辛苦了。我在你们两的方案上再想想看能不能再优化点。