oracle union & cast & sum & group by

問題:
create table main(id varchar2(20),yearly varchar2(4),unitid varchar2(20));
alter table main add constraint pk_main primary key (id) ;

insert into MAIN (ID, YEARLY, UNITID)
values ('1', '2007', '101');
insert into MAIN (ID, YEARLY, UNITID)
values ('2', '2007', '102');
insert into MAIN (ID, YEARLY, UNITID)
values ('3', '2007', '103');
insert into MAIN (ID, YEARLY, UNITID)
values ('4', '2007', '105');
commit;

create table detail(id varchar2(20),medid varchar2(10),medname varchar2(20),jan number,
feb number,mar number,apr number,may number,jun number,jul number,aug number,sep number,oct number,nov number,dec number);
alter table detail add constraint pk_detail primary key (id,medid) ;

insert into DETAIL (ID, MEDID, MEDNAME, JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC)
values ('1', '001', '止痛片', 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
insert into DETAIL (ID, MEDID, MEDNAME, JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC)
values ('1', '002', '感冒靈', 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2);
insert into DETAIL (ID, MEDID, MEDNAME, JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC)
values ('2', '001', '止痛片', 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
insert into DETAIL (ID, MEDID, MEDNAME, JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC)
values ('2', '002', '感冒靈', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
insert into DETAIL (ID, MEDID, MEDNAME, JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC)
values ('2', '003', '傷風膠囊', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
insert into DETAIL (ID, MEDID, MEDNAME, JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC)
values ('3', '002', '感冒靈', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
insert into DETAIL (ID, MEDID, MEDNAME, JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC)
values ('3', '001', '止痛片', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
insert into DETAIL (ID, MEDID, MEDNAME, JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC)
values ('3', '004', '克咳膠囊', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
insert into DETAIL (ID, MEDID, MEDNAME, JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC)
values ('4', '004', '克咳膠囊', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
commit;

我要的結果是這樣的,如想要第一個月的統計數

001 止痛片 3
101 1
102 1
103 1
002 感冒靈 4
101 2
102 1
103 1
003 傷風膠囊 1
102 1
004 克咳膠囊 2
103 1
105 1

結果:
SELECT COL1,COL2,COL3 FROM
(
select
    MEDID AS COL1
    ,MEDNAME AS COL2
    ,SUM(JAN) AS COL3
    ,MEDID AS COL4
from detail
GROUP BY MEDID,MEDNAME

UNION

SELECT
    B.UNITID AS COL1
    ,CAST(A.JAN AS VARCHAR2(20)) AS COL2
    ,NULL AS COL3
    ,A.MEDID AS COL4
FROM DETAIL A
LEFT JOIN MAIN B ON A.ID=B.ID
ORDER BY COL4 ,COL1
發佈了25 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章