問題:
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
)
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
)