日期:2014-05-18  浏览次数:20580 次

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