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

求三个UPDATE语句,该如何处理

2013-01-27 
求三个UPDATE语句DROP TABLE JJDROP TABLE QQCreate table jj(jj_id integer,-- 物理主键REPORT_M_ID IN

求三个UPDATE语句
DROP TABLE JJ;
DROP TABLE QQ;
Create table jj(
       jj_id integer,-- 物理主键
       REPORT_M_ID INTEGER,--主表ID
       ITEM_ID VARCHAR2(20),--项目
       Year varchar2(6),--报表年份
       Org_Code varchar2(10),--组织机构编码
       JAN integer,      --1月
       FER INTEGER,--2月
       MAR INTEGER,--3月
       BUSS_TYPE varchar2(10)--经营业务
);
CREATE TABLE QQ(
       QQ_id integer,-- 物理主键
       REPORT_M_ID INTEGER,--主表ID
       ITEM_ID VARCHAR2(20),--项目
       Year varchar2(6),--报表年份
       Org_Code varchar2(10),--组织机构编码
       JAN integer,      --1月
       FER INTEGER,--2月
       MAR INTEGER,--3月
       BUSS_TYPE varchar2(10)--经营业务
);
--JJ表,jj_id是物理主键,ITEM_ID+Year+Org_Code+BUSS_TYPE是业务组合主键,QQ表类似。
--相同的ITEM_ID+Year+Org_Code,即使BUSS_TYPE不同,但其REPORT_M_ID(主表ID)是一样的
--测试数据
insert into jj select 1,1,'A001_01','201206','H2222',3,3,3,'AA' FROM DUAL;
insert into jj select 2,1,'A001_02','201206','H2222',4,4,4,'AA' FROM DUAL;
insert into jj select 3,1,'A001_03','201206','H2222',5,5,5,'AA' FROM DUAL;
insert into jj select 4,1,'A001_01','201206','H2222',6,6,6,'BB' FROM DUAL;
insert into jj select 5,1,'A001_02','201206','H2222',7,7,7,'BB' FROM DUAL;
insert into jj select 6,1,'A001_03','201206','H2222',8,8,8,'BB' FROM DUAL;
insert into jj select 7,1,'A001_01','201206','H2222',6,6,6,'CC' FROM DUAL;
insert into jj select 8,1,'A001_02','201206','H2222',7,7,7,'CC' FROM DUAL;
insert into jj select 9,1,'A001_03','201206','H2222',8,8,8,'CC' FROM DUAL;
insert into jj select 10,3,'A001_01','201207','H2222',33,33,33,'AA' FROM DUAL;
insert into jj select 11,3,'A001_02','201207','H2222',44,44,44,'AA' FROM DUAL;
insert into jj select 12,3,'A001_03','201207','H2222',55,55,55,'AA' FROM DUAL;
insert into jj select 13,3,'A001_01','201207','H2222',66,66,66,'BB' FROM DUAL;
insert into jj select 14,3,'A001_02','201207','H2222',77,77,77,'BB' FROM DUAL;
insert into jj select 15,3,'A001_03','201207','H2222',88,88,88,'BB' FROM DUAL;
insert into jj select 16,3,'A001_01','201207','H2222',66,66,66,'CC' FROM DUAL;
insert into jj select 17,3,'A001_02','201207','H2222',77,77,77,'CC' FROM DUAL;
insert into jj select 18,3,'A001_03','201207','H2222',88,88,88,'CC' FROM DUAL;

insert into QQ select 1,2,'B001_01','201206','H2222',11,11,11,'AA' FROM DUAL;
insert into QQ select 2,2,'B001_02','201206','H2222',12,12,12,'AA' FROM DUAL;
insert into QQ select 3,2,'B001_03','201206','H2222',13,13,13,'AA' FROM DUAL;


insert into QQ select 4,2,'B001_01','201206','H2222',14,14,14,'BB' FROM DUAL;
insert into QQ select 5,2,'B001_02','201206','H2222',15,15,15,'BB' FROM DUAL;
insert into QQ select 6,2,'B001_03','201206','H2222',16,16,16,'BB' FROM DUAL;
insert into QQ select 7,4,'B001_01','201207','H2222',111,111,111,'AA' FROM DUAL;
insert into QQ select 8,4,'B001_02','201207','H2222',122,122,122,'AA' FROM DUAL;
insert into QQ select 9,4,'B001_03','201207','H2222',133,133,133,'AA' FROM DUAL;
insert into QQ select 10,4,'B001_01','201207','H2222',144,144,144,'BB' FROM DUAL;
insert into QQ select 11,4,'B001_02','201207','H2222',155,155,155,'BB' FROM DUAL;
insert into QQ select 12,4,'B001_03','201207','H2222',166,166,166,'BB' FROM DUAL;


--第一、求UPDATE语句,修改A001_03的值 ,公式A001_03=B001_01+B001_03,修改后结果如下:
insert into jj select 3,1,'A001_03','201206','H2222',24,24,24,'AA' FROM DUAL;
insert into jj select 6,1,'A001_03','201206','H2222',30,30,30,'BB' FROM DUAL;
insert into jj select 12,3,'A001_03','201207','H2222',244,244,244,'AA' FROM DUAL;
insert into jj select 15,3,'A001_03','201207','H2222',310,310,310,'BB' FROM DUAL;

--第二、求UPDATE语句,修改A001_03的值 ,公式A001_03=A001_01+B001_01+B001_03,修改后结果如下:
insert into jj select 3,1,'A001_03','201206','H2222',27,27,27,'AA' FROM DUAL;
insert into jj select 6,1,'A001_03','201206','H2222',36,36,36,'BB' FROM DUAL;
insert into jj select 12,3,'A001_03','201207','H2222',277,277,277,'AA' FROM DUAL;
insert into jj select 15,3,'A001_03','201207','H2222',376,376,376,'BB' FROM DUAL;

--第三、求UPDATE语句,修改A001_03的值 ,公式A001_03=A001_01+A001_02+B001_01+B001_03,修改后结果如下:
insert into jj select 3,1,'A001_03','201206','H2222',31,31,31,'AA' FROM DUAL;
insert into jj select 6,1,'A001_03','201206','H2222',42,42,42,'BB' FROM DUAL;
insert into jj select 12,3,'A001_03','201207','H2222',321,321,321,'AA' FROM DUAL;
insert into jj select 15,3,'A001_03','201207','H2222',453,453,453,'BB' FROM DUAL;


[解决办法]
CREATE VIEW vv (
   vv_id integer,-- 物理主键
   REPORT_M_ID INTEGER,--主表ID
   ITEM_ID VARCHAR2(20),--项目
   Year varchar2(6),--报表年份
   Org_Code varchar2(10),--组织机构编码
   JAN integer, --1月
   FER INTEGER,--2月
   MAR INTEGER,--3月
   BUSS_TYPE varchar2(10)--经营业务
) AS
  SELECT * FROM jj
   UNION ALL
  SELECT * FROM gg



    UPDATE jj SET (jj.jan,jj.fer,jj.mar) = 
             (SELECT SUM(vv.jan),SUM(vv.fer),SUM(vv.mar)
                FROM vv
               WHERE vv.item_id IN ('B001_01','B001_03') 

                         -- 或改为:('A001_01','B001_01','B001_03')


                         --        ('A001_01','A001_02','B001_01','B001_03')

                 AND vv.year      = jj.year
                 AND vv.buss_type = jj.buss_type)
     WHERE jj.item_id = 'A001_03'

热点排行