首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

怎么更新表中重复第一条记录呢

2012-01-20 
如何更新表中重复第一条记录呢?f表记号产品编号批号数量00145614706040110009456147060401600024561470702

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

热点排行