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表的第一个相同编号,批号中呢?
记号 产品编号 批号 数量
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表的第一个相同编号,批号中呢?
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 行)
*/