如何更新表中重复第一条记录呢?
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表的第一个相同编号,批号中呢?
[解决办法]
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)
go
update 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 f
drop table f,s
/*
记号 产品编号 批号 数量
---------- ---------- ---------- -----------
001 456147 060401 9
009 456147 060401 60
002 456147 070201 -8
003 665512 070102 -90
(所影响的行数为 4 行)
*/