大概:create trigger tr_表B_insert
on 表B
for insertupdate a
set 余量=isnull(b.余量,t.总数)-a.使用量
from 表B a inner join insert i
on a.日期=i.日期 and a.物品=i.物品 
and a.使用量=i.使用量   --主键连接,不知道主键先这么写
left join 表B b on
i.物品=b.物品 and b.日期=(select max(日期) from 表B where 物品=i.物品 and 日期<i.日期)
left join 表A t on i.物品=t.物品go

解决方案 »

  1.   

    --直接写个视图实现吧select 品名,日期,数量,数量累计=(
        select sum(数量) from a where 品名=aa.品名 and 日期<=aa.日期)
    from a aa
      

  2.   

    --示例
    create table test(品名 varchar(10),日期 datetime,数量 int)
    insert into test values('aaa','19990101',2)
    insert into test values('bbb','20000101',3)
    insert into test values('ccc','19980101',4)
    insert into test values('aaa','19970101',5)
    insert into test values('eee','19960101',6)
    insert into test values('bbb','19950101',1)select 品名,日期,数量,数量累计=(
        select sum(数量) from test where 品名=aa.品名 and 日期<=aa.日期)
    from test aa
    order by 品名,日期drop table test/*--测试结果
    品名         日期                        数量        数量累计        
    ---------- ---------------------------- ----------- ---
    aaa        1997-01-01 00:00:00.000      5           5
    aaa        1999-01-01 00:00:00.000      2           7
    bbb        1995-01-01 00:00:00.000      1           1
    bbb        2000-01-01 00:00:00.000      3           4
    ccc        1998-01-01 00:00:00.000      4           4
    eee        1996-01-01 00:00:00.000      6           6(所影响的行数为 6 行)
    --*/
      

  3.   

    与楼主有类似问题 利用zjcxc(邹建) 所说的方案解决似乎效率不高
    我的test表有30000条记录 aa表有3000条记录 按上述查询了200多秒还没出结果 有更好的方案吗
      

  4.   

    另一种方法就是在你的原表上加一个字段:数量累计
    在日期上设置聚集索引.--然后需要的时候用下面的语句来生成数量累计declare @i int
    update 表 set @i=isnull(@i,0)+isnull(数量,0),数量累计=@i
    --如果你的数量不会出现NULL值,还可以用
    declare @i int
    set @i=0
    update 表 set @i=@i+数量,数量累计=@i
      

  5.   

    zjcxc(邹建) 的isnull()是个干什么的函数
    再有
    declare @i int
    set @i=0
    update 表 set @i=@i+数量,数量累计=@i
    语句似乎是不分品名而进行数量累计的
    现在的问题是要不同的品名各自累加 该怎样写
      

  6.   

    --按品名
    declare @i int,@品名
    update 表 set @i=case @品名 when 品名 then @i+数量 else 数量 end,数量累计=@i,品名=@品名