求一拆分的存储过程,请指点
有表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
[解决办法]
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