f表
记号 产品编号 批号   数量
001  456147   060401  10
009  456147   060401  60
002  456147   070201  10
003  665512   070102  100
...s表
记号 产品编号 批号   数量
0001  456147   060401  1
0001  456147   060401  3
0001  456147   060401  15
0002  456147   060401  60
0003  456147   070201  2
0004  665512   070102  10
...
如何按S表产品编号,批号的累计的数量减F表现有的相同编号数量的差,更新累计到F表的第一个相同编号,批号中呢?

解决方案 »

  1.   

    create table f(记号 varchar(10),产品编号 varchar(10),批号 varchar(10),数量 int)
    insert into f values('001',  '456147',   '060401',  10)
    insert into f values('009',  '456147',   '060401',  60)
    insert into f values('002',  '456147',   '070201',  10)
    insert into f values('003',  '665512',   '070102',  100)
    create table s(记号 varchar(10),产品编号 varchar(10),批号 varchar(10),数量 int)
    insert into s values('0001',  '456147',   '060401',  1)
    insert into s values('0001',  '456147',   '060401',  3)
    insert into s values('0001',  '456147',   '060401',  15)
    insert into s values('0002',  '456147',   '060401',  60)
    insert into s values('0003',  '456147',   '070201',  2)
    insert into s values('0004',  '665512',   '070102',  10)
    goupdate f
    set 数量 = n.数量
    from f,
    (
      select m2.记号,m1.* from
      (
        select t2.产品编号 , t2.批号,t2.数量 - t1.数量 数量 from
        (select 产品编号 ,批号,sum(数量) 数量 from f group by 产品编号 ,批号) t1,
        (select 产品编号 ,批号,sum(数量) 数量 from s group by 产品编号 ,批号) t2
        where t1.产品编号 = t2.产品编号 and t1.批号 = t2.批号
      ) m1,
      (
        select 产品编号 ,批号,min(记号) 记号 from f group by 产品编号 ,批号
      ) m2
      where m1.产品编号 = m2.产品编号 and m1.批号 = m2.批号
    ) n
    where f.记号 = n.记号 and f.产品编号 = n.产品编号 and f.批号 = n.批号select * from fdrop table f,s/*
    记号       产品编号   批号       数量          
    ---------- ---------- ---------- ----------- 
    001        456147     060401     9
    009        456147     060401     60
    002        456147     070201     -8
    003        665512     070102     -90(所影响的行数为 4 行)
    */