declare @a table(货号 int,毛需求 int,订单供给 int,仓存供给 int)
insert @a(货号,毛需求,订单供给,仓存供给)
values(101,500,0,0)
insert @a(货号,毛需求,订单供给,仓存供给)
values(101,0,100,0)
insert @a(货号,毛需求,订单供给,仓存供给)
values(101,0,0,400)
insert @a(货号,毛需求,订单供给,仓存供给)
values(101,200,0,400)
select * from @a
declare @b table(货号 int,毛需求 int,订单供给 int,仓存供给 int,累计 int)
declare @num int
set @num=0declare @a1 int
declare @a2 int
declare @a3 int
declare Num_Cursor CURSOR FOR                      --游标的定义
select 毛需求,订单供给,仓存供给 from @a
open Num_Cursor                                    --打开游标
fetch next from Num_Cursor into @a1,@a2,@a3
while @@FETCH_STATUS=0
begin
set @num=@num+@a2+@a3-@a1
insert @b(毛需求,订单供给,仓存供给,累计)        
values(@a1,@a2,@a3,@num)
fetch next  from Num_Cursor  into  @a1,@a2,@a3      --循环
end
close Num_Cursor                                    --关闭游标
deallocate Num_Cursor                               --销毁游标
select * from @b--参考

解决方案 »

  1.   

    DECLARE @tb TABLE([Item] varchar(100), [日期] DATETIME, [据型] int, [数量] int)
    INSERT INTO @tb
    SELECT  'AA', '2006-01-15', 1, 150
    UNION ALL SELECT 'BB', '2006-01-16', 1, 200
    UNION ALL SELECT 'AA', '2006-01-28', 2, 500
    UNION ALL SELECT 'BB', '2006-01-17', 2, 20SELECT ITEM, 日期,CASE 据型 WHEN 1 THEN 数量 ELSE 0 END AS 进货数量,
     CASE 据型 WHEN 2 THEN 数量 ELSE 0 END AS 发数出量 INTO #T
    FROM @tb
    ORDER BY ITEM, 日期SELECT ITEM, 日期, 进货数量, 发数出量, 
    进货数量 - 发数出量 + 
    ISNULL((SELECT TOP 1 进货数量 - 发数出量 FROM #T 
    WHERE ITEM = A.ITEM AND 日期 < A.日期 ORDER BY 日期 DESC),0) AS 结存 
    FROM #T ADROP TABLE #T
      

  2.   

    谢谢你的回复!这句的逻辑是?谢谢!SELECT ITEM, 日期, 进货数量, 发数出量, 
    进货数量 - 发数出量 + 
    ISNULL((SELECT TOP 1 进货数量 - 发数出量 FROM #T 
    WHERE ITEM = A.ITEM AND 日期 < A.日期 ORDER BY 日期 DESC),0) AS 结存 
    FROM #T A