dbgrideh中的结构如下单据号         入库数量       出库数量     进价   售价     结余库存  售价金额
123           200           0         0.8    1       200   200.00
456           100           0         2      3       300   500.00 
789            0            200       0.8    1       100   300.00这样解释:结余库存的值永远等于上一行的库存+ or -下一行的数据(如果是入库则+,如果是出库则-)
售价金额也是一样的道理 这个方法真的很奇妙 请大家指点

解决方案 »

  1.   

    哈哈 我实现了 贴出来给大家看看,自己给自己加分var i,kcl1,kcl2:Integer;
    begin
    qry_spmxz.Open;
    qry_spmxz.First;
    kcl1:=qry_spmxz.Fields[11].AsInteger;
    for i:=1 to qry_spmxz.RecordCount do
    begin
    qry_spmxz.Edit;if qry_spmxz.FieldByName('djlx').AsString='0' then
    begin
    kcl2:=kcl1+qry_spmxz.Fields[9].AsInteger;
    end;
    if qry_spmxz.FieldByName('djlx').AsString='1' then
    begin
    kcl2:=kcl1-qry_spmxz.Fields[10].AsInteger;
    end;
    qry_spmxz.FieldByName('kcl').Value:=kcl2;
    kcl1:=kcl2;
    qry_spmxz.Next;
    end;
      

  2.   

    SQL查询时计算就可以了,dbgrideh只作显示...
    不知道你的表结构如何?
      

  3.   


    //示意代码
    SELECT *,
          金额=(SELECT SUM(CASE WHEN djlx=0 THEN 1*结余金额 ELSE -1*结余金额 ) FROM TABLE1 WHERE ID<A.ID)
    FROM TABLE1 A
      

  4.   

    放到Query中计算,数据量大会慢的,不如做成视图或查询~DECLARE @T TABLE(id int,b int,c int)
    insert @t select 1,100,1
    union all select 2,200,0
    union all select 3,300,1select *,
           balance=(select sum(case when c=1 then 1*b else -1*b end)  from @t where id<=A.id)from @t A