sql实现比较困难,除非用游标,看过很多软件,好像都是在前台程序实现
up一下

解决方案 »

  1.   

    生成的表格如下,请教如何将'结存'列为NULL处添入结存数量?
    期间 日期 事物类型 单位 收入 发出 结存
    2005·1  2005-1-1 期初结存 公斤 0 0 594.66
    2005·1  2005-1-1 领料单 公斤 0 427.7 NULL
    2005·1  2005-1-4 领料单 公斤 0 1400 NULL
    2005·1  2005-1-4 领料单 公斤 0 1512 NULL
    2005·1  2005-1-5 外购入库 公斤 4.5 0 NULL
    2005·1  2005-1-5 外购入库 公斤 560 0 NULL
    2005·1  2005-1-5 外购入库 公斤 4298 0 NULL
    2005·1  2005-1-5 领料单 公斤 0 -70 NULL
    2005·1  2005-1-10 外购入库 公斤 2646 0 NULL
    2005·1  2005-1-12 领料单 公斤 0 1470 NULL
    2005·1  2005-1-17 领料单 公斤 0 -84 NULL
    2005·1  2005-1-17 领料单 公斤 0 84 NULL
    2005·1  2005-1-17 领料单 公斤 0 1428 NULL
    2005·1  2005-1-31 本期合计 公斤 7508.5 6167.7 1935.46
    2005·1  2005-1-31 期末结存 公斤 0 0 1935.46
    2005·1  2005-1-31 本年累计 公斤 7508.5 6167.7 1935.46
    2005·2  2005-2-1 期初结存 公斤 0 0 1935.46
    2005·2  2005-2-1 领料单 公斤 0 -110 NULL
    2005·2  2005-2-1 领料单 公斤 0 110 NULL
    2005·2  2005-2-17 领料单 公斤 0 -146 NULL
    2005·2  2005-2-28 本期合计 公斤 0 -146 2081.46
    2005·2  2005-2-28 期末结存 公斤 0 0 2081.46
    2005·2  2005-2-28 本年累计 公斤 7508.5 6021.7 2081.46
      

  2.   

    set nocount on--创建临时表
    if exists(select * from sysobjects where id=object_id('#'))
    drop table #
    gocreate table #
    (
      ID int identity,
      [期间] varchar(20),
      [日期] datetime,
      [事物类型] varchar(20),
      [单位] varchar(20),
      [收入] money ,
      [发出] money,
      [结存] money
    )--插入测试数据
    insert #([期间],[日期],[事物类型],[单位], [收入],[发出],[结存]) 
    select '2005-1','2005-1-1','期初结存','公斤',0,0,594.66 union all
    select '2005-1','2005-1-1','领料单','公斤',0,427.7,null union all
    select '2005-1','2005-1-4','领料单','公斤',0,1400,null union all
    select '2005-1','2005-1-4','领料单','公斤',0,1512,null union all
    select '2005-1','2005-1-5','外购入库','公斤',4.5,0,null union all
    select '2005-1','2005-1-5','外购入库','公斤',560,0,null union all
    select '2005-1','2005-1-5','外购入库','公斤',4298,0,null union all
    select '2005-1','2005-1-5','领料单','公斤',0,-70,null union all
    select '2005-1','2005-1-10','外购入库','公斤',2646,0,null union all
    select '2005-1','2005-1-5','领料单','公斤',0,1470,null union all
    select '2005-1','2005-1-5','领料单','公斤',0,-84,null union all
    select '2005-1','2005-1-5','领料单','公斤',0,84,null union all
    select '2005-1','2005-1-5','领料单','公斤',0,1428,null
    --select * from #declare @id int,@jiecun money,@tmp money
    declare @sql nvarchar(1000)declare cur cursor for
    select ID,[结存] from #
    open cur
    fetch next from cur into @id,@jiecun
    while @@fetch_status=0
    begin
        if @id=1
          begin
            set @tmp=@jiecun
            fetch next from cur into @id,@jiecun
            continue;
          end
        else
          begin
            set @sql=N'update # set [结存]=[收入]-[发出]+'+cast(@tmp as nvarchar)+N' where ID='+cast(@ID as nvarchar) +
                     N'select @t=[结存] from # where ID='+cast(@ID as nvarchar)
            print @sql
            exec sp_executesql @sql,N'@t money output',@jiecun output
            set @tmp=@jiecun     
            fetch next from cur into @id,@jiecun  
          end
    end
    close cur
    deallocate cur--查询结果
    select * from #--删除临时表
    drop table #
    set nocount off结果:
    1 2005-1 2005-1-1 期初结存 公斤 .0000 .0000 594.6600
    2 2005-1 2005-1-1 领料单 公斤 .0000 427.7000 166.9600
    3 2005-1 2005-1-4 领料单 公斤 .0000 1400.0000 -1233.0400
    4 2005-1 2005-1-4 领料单 公斤 .0000 1512.0000 -2745.0400
    5 2005-1 2005-1-5 外购入库 公斤 4.5000 .0000 -2740.5400
    6 2005-1 2005-1-5 外购入库 公斤 560.0000 .0000 -2180.5400
    7 2005-1 2005-1-5 外购入库 公斤 4298.0000 .0000 2117.4600
    8 2005-1 2005-1-5 领料单 公斤 .0000 -70.0000 2187.4600
    9 2005-1 2005-1-10 外购入库 公斤 2646.0000 .0000 4833.4600
    10 2005-1 2005-1-5 领料单 公斤 .0000 1470.0000 3363.4600
    11 2005-1 2005-1-5 领料单 公斤 .0000 -84.0000 3447.4600
    12 2005-1 2005-1-5 领料单 公斤 .0000 84.0000 3363.4600
    13 2005-1 2005-1-5 领料单 公斤 .0000 1428.0000 1935.4600
      

  3.   

    将'结存'列为NULL处添入结存数量,跨过'本期合计'、'期末结存'、'本年累计'
    怎么办?
      

  4.   

    将'结存'列为NULL处添入结存数量,跨过'本期合计'、'期末结存'、'本年累计'
    怎么办?
    原贴为:
    生成的表格如下,请教如何将'结存'列为NULL处添入结存数量?
    期间 日期 事物类型 单位 收入 发出 结存
    2005·1  2005-1-1 期初结存 公斤 0 0 594.66
    2005·1  2005-1-1 领料单 公斤 0 427.7 NULL
    2005·1  2005-1-4 领料单 公斤 0 1400 NULL
    2005·1  2005-1-4 领料单 公斤 0 1512 NULL
    2005·1  2005-1-5 外购入库 公斤 4.5 0 NULL
    2005·1  2005-1-5 外购入库 公斤 560 0 NULL
    2005·1  2005-1-5 外购入库 公斤 4298 0 NULL
    2005·1  2005-1-5 领料单 公斤 0 -70 NULL
    2005·1  2005-1-31 本期合计 公斤 7508.5 6167.7 1935.46
    2005·1  2005-1-31 期末结存 公斤 0 0 1935.46
    2005·1  2005-1-31 本年累计 公斤 7508.5 6167.7 1935.46
    2005·2  2005-2-1 期初结存 公斤 0 0 1935.46
    2005·2  2005-2-1 领料单 公斤 0 -110 NULL
    2005·2  2005-2-1 领料单 公斤 0 110 NULL
    2005·2  2005-2-17 领料单 公斤 0 -146 NULL
    2005·2  2005-2-28 本期合计 公斤 0 -146 2081.46
    2005·2  2005-2-28 期末结存 公斤 0 0 2081.46
    2005·2  2005-2-28 本年累计 公斤 7508.5 6021.7 2081.46