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

求一拆分的存储过程,请指点
有表A 字段 a, c,m(m是a,c这个字段对应的总的数)
有表B 字段 a, c,d, f, n(n是a,c,d,f对应的总数)
有表C 字段 a, c,d, f, s(s是a,c,d,f对应的总数)
现在要把表A中作业的一个f的数据写到表B中要求如下:
  数据格式 1
  A表: a c m
  AA CC 50 ---AA,CC,50代表的都是数据
  BB CC 20 ---BB,CC,20代表的都是数据
  B表:a c d f n ---现在没有数据(等待插入)
   

  C表:a c d f s 
  AA CC DD1 FF1 10
  AA CC DD2 FF2 25
  AA CC DD3 FF3 15
  BB CC DD1 FF1 10
  BB CC DD2 FF2 10
  执行的过程是
  首先以A表中的a,c两字段位条件比如A.a=AA,A.c=CC得时候取出 A.m=50
  然后再C表中以C.a=AA,C.c=CC为条件取出
  a c d f s 
  AA CC DD1 FF1 10
  AA CC DD2 FF2 25
  AA CC DD3 FF3 15
  这些都符合条件
  拿取出的A.m=50与从C表中取出的三条数据的C.s从第一条依次进行比较
  如果A.m>C.s B.n=C.s (不大于的话参照数据格式2)
  第二条一样......
  第三条...........
  然后把数据写入B表
  B表的数据应改为
  a c d f n
  AA CC DD1 FF1 10
  AA CC DD2 FF2 25
  AA CC DD3 FF3 15
  BB CC DD1 FF1 10
  BB CC DD2 FF2 10
 ----------------------------------------------- 
  数据格式 2
  A表: a c m
  AA CC 30 ---AA,CC,50代表的都是数据
  BB CC 15 ---BB,CC,20代表的都是数据
  B表:a c d f n ---现在没有数据(等待插入)
   

  C表:a c d f s 
  AA CC DD1 FF1 10
  AA CC DD2 FF2 25
  AA CC DD3 FF3 15
  BB CC DD1 FF1 10
  BB CC DD2 FF2 10
  然后把数据写入B表
  B表的数据应改为
  a c d f n
  AA CC DD1 FF1 10
  AA CC DD2 FF2 20
  AA CC DD3 FF3 0
  BB CC DD1 FF1 10
  BB CC DD2 FF2 5  
 

------解决方案--------------------
SQL code
 
create table ta(a varchar(2),c varchar(2),m int)
insert into ta select
'AA','CC',30 union select --AA,CC,50代表的都是数据
'BB','CC',15 ---BB,CC,20代表的都是数据

create table tb (a varchar(2),c varchar(2), d varchar(3), f varchar(3),n  int)  ---现在没有数据(等待插入)


create table tc(a varchar(2),c varchar(2),d varchar(3),f varchar(3),s int)
insert into tc select 
'AA','CC','DD1','FF1',10  union select
'AA','CC','DD2','FF2',25  union select
'AA','CC','DD3','FF3',15  union select
'BB','CC','DD1','FF1',10  union select
'BB','CC','DD2','FF2',1