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

求一拆分的存储过程,请指点解决办法

2012-02-19 
求一拆分的存储过程,请指点有表A 字段a, c,m(m是a,c这个字段对应的总的数)有表B 字段a, c,d, f, n(n是a,c,

求一拆分的存储过程,请指点
有表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',10


go




insert tb
select a,c,d,f,case when ((select sum(m) from ta where a=a.a and c = a.c)-
    isnull((select sum(s) from tc where a=a.a and c = a.c and d <=a.d and f <=a.f),0)) > 0
    then s else
    case when s +( (select sum(m) from ta where a=a.a and c = a.c) -
    isnull((select sum(s) from tc where a=a.a and c = a.c and d <=a.d and f <=a.f),0)) > 0
    then s +( (select sum(m) from ta where a=a.a and c = a.c) -
    isnull((select sum(s) from tc where a=a.a and c = a.c and d <=a.d and f <=a.f),0))
    else 0 end
    end
from tc a

select * from tb
/*

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

(所影响的行数为 5 行)
*/

drop table ta,tb,tc

热点排行