怎么更新表中重复第一条记录呢
如何更新表中重复第一条记录呢?
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 行)
*/
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 行)
*/