CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  开发

各位大侠指点

楼主supJaney(笨鸟先飞)2005-06-01 20:28:51 在 Oracle / 开发 提问

表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

相关问题

  • 求各位指点。
  • 各位多指点!
  • 各位高手,请指点!
  • 请各位大侠指点
  • 请各位大虾指点!!!
  • 请各位大虾指点
  • 请各位指点!!!!!SOS
  • 请各位高手指点!
  • 请各位指点迷津!!
  • 请各位高手指点!!!

关键词

  • aic
  • aae
  • 缴费
  • aac
  • sum
  • 帐户
  • prm
  • varchar
  • number
  • 个人

得分解答快速导航

  • 帖主:supJaney

相关链接

  • Oracle类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo