各位大侠指点
表A;
column_id column_name comments
AAC001 个人编号 VARCHAR2(10)
AAE003 对应费款所属期 VARCHAR2(6)
AAE002 费款所属期 VARCHAR2(6)
AAB001 单位编号 VARCHAR2(14)
AAE143 缴费类型 VARCHAR2(3)
AIC021 个人缴费金额 NUMBER(8,2)
AAE114 个人缴费缴费标志 VARCHAR2(3)
AAE037 个人缴费到帐日期 DATE
AIC024 单位缴费划入帐户金额 NUMBER(8,2)
表B;
column_name comments data_type
AAC001 个人编号 VARCHAR2(10)
AAE001 年度 NUMBER(4)
AAB001 单位编号 VARCHAR2(14)
AIC058 本年帐户单位缴费划拨部分本金 NUMBER(8,2)
AIC072 本年帐户个人缴费部分本金 NUMBER(8,2)
AIC079 本年缴费月数 NUMBER(3)
AIC081 帐户记息日期 DATE
AAE120 注销标志 VARCHAR2(3)
AIC082 帐户欠费月数 NUMBER(3)
AIC084 帐户欠费金额 NUMBER(8,2)
将表A中的aic021、aic024根据个人编号循环取出、根据年份求该年的sum(aic021)、sum(aic024).对应更新到
表B的该年份的aic072、aic058。例:aic043=n_aic024_sum,aic058=n_aic024_sum,aic044=n_aic021_sum,aic072=n_aic021_sum。
比如:表A 199801 aic021 aic024
100 400
199802 aic021 aic024
200 200
更新到表B中为1998 aic072 aic058
300 600
注意表A中的AAE002为年月即198801,表B中的AAE001为年即:1988
问题点数:0、回复次数:4Top
1 楼zsfww1205(努力学习oracle)回复于 2005-06-01 20:57:08 得分 0
update B set aic072 = (
select sum(aic021) from A where AAE002 = '..' group by AAC001),
aic058 = (
select sum(aic021) from A where AAE002 = '..' group by AAC001),
AAE001 = substr(AAE002,1,4)
where B.AAC001 = A.AAC001Top
2 楼zsfww1205(努力学习oracle)回复于 2005-06-01 20:58:40 得分 0
这样应该好一些:
update B set aic072 = (
select sum(aic021) from A group by AAC001,substr(AAE002,1,4)),
aic058 = (
select sum(aic021) from A group by AAC001,substr(AAE002,1,4)),
AAE001 = substr(AAE002,1,4)
where B.AAC001 = A.AAC001
Top
3 楼supJaney(笨鸟先飞)回复于 2005-06-02 13:29:15 得分 0
PROCEDURE Prc_ic02_once ( prm_grbh IN VARCHAR2,
prm_nd IN VARCHAR2,
prm_AppCode OUT NUMBER,
prm_ErrorMsg OUT VARCHAR2)
IS
/*-- 变量声明 ----------------------------------------------------------*/
n_aic021_sum NUMBER(12,2);
n_aic024_sum NUMBER(12,2);
n_aic020_sum NUMBER(12,2);
n_count INTEGER;
v_aab001 VARCHAR2(14);
BEGIN
-- 初始化
prm_AppCode := pkg_comm.def_OK;
SELECT SUM(aic021),SUM(aic024),SUM(aic020),COUNT(1),max(aab001) INTOn_aic021_sum,n_aic024_sum,n_aic020_sum,n_count,v_aab001
FROM ic01
WHERE aac001 = prm_grbh
AND substr(aae002,1,4) = prm_nd
AND aae114 = '1'
AND aae115 = '1'
AND aae143 = '1'
AND aae200 = '11'
AND akc021 = '11';
UPDATE IC02
SET AIC072= n_aic021_sum,
AIC058= n_aic024_sum,
AIC080= n_aic020_sum
WHERE AAC001=prm_grbh
AND AAE001=prm_nd;
IF SQL%NOTFOUND THEN
INSERT INTO ic02(aac001,aae001,aab001,AIC072,AIC058,AIC080,aae120)
VALUES(prm_grbh,prm_nd+i,v_aab001,n_aic021_sum,n_aic024_sum,n_aic020_sum,'0');
END IF;
Exception
When Others Then
prm_AppCode := -1;
prm_ErrorMsg := '存储过程pkg_I_ZHGL.Prc_ic02_once)出错!'||SqlErrm;
END Prc_ic02_once;
这是为上面的问题写的过程,请大家指导下为什么错了!!
Top
4 楼xyqiqi(琪琪)回复于 2005-06-02 16:22:03 得分 0
update b set aic072=aic021,aic058=aic024
select AAE002,aic021,aic024 (select DATENAME ( year , AAE002) as AAE002,sum(aic021) as aic021,sum(aic024) as aic024
from a group by DATENAME ( year , AAE002)) as a
where a.AAE002=b.AAE001Top




