create table YEAR
(
ALL_YEAR VARCHAR2(6),
YEAR VARCHAR2(4),
MONTH VARCHAR2(8),
MONTH1 VARCHAR2(8)
)
;
insert into YEAR (ALL_YEAR, YEAR, MONTH, MONTH1)
values ('201101', '2011', '一月', '01');
insert into YEAR (ALL_YEAR, YEAR, MONTH, MONTH1)
values ('201102', '2011', '二月', '02');
insert into YEAR (ALL_YEAR, YEAR, MONTH, MONTH1)
values ('201103', '2011', '三月', '03');
insert into YEAR (ALL_YEAR, YEAR, MONTH, MONTH1)
values ('201104', '2011', '四月', '04');
insert into YEAR (ALL_YEAR, YEAR, MONTH, MONTH1)
values ('201105', '2011', '五月', '05');
insert into YEAR (ALL_YEAR, YEAR, MONTH, MONTH1)
values ('201106', '2011', '六月', '06');
insert into YEAR (ALL_YEAR, YEAR, MONTH, MONTH1)
values ('201107', '2011', '七月', '07');
insert into YEAR (ALL_YEAR, YEAR, MONTH, MONTH1)
values ('201108', '2011', '八月', '08');
insert into YEAR (ALL_YEAR, YEAR, MONTH, MONTH1)
values ('201109', '2011', '九月', '09');
insert into YEAR (ALL_YEAR, YEAR, MONTH, MONTH1)
values ('201110', '2011', '十月', '10');
insert into YEAR (ALL_YEAR, YEAR, MONTH, MONTH1)
values ('201111', '2011', '十一月', '11');
insert into YEAR (ALL_YEAR, YEAR, MONTH, MONTH1)
values ('201112', '2011', '十二月', '12');
commit;
--给个统计所有员工考情记录的sql
SELECT 'E' || T1.EMPCODE 编号,T1.EMPNAME 姓名,T1.DEPT 部门,T1.POST 职位,
DECODE(T.月份,B.MONTH1,T.旷工,0) 旷工,DECODE(T.月份,B.MONTH1,T.事假,0) 事假,
DECODE(T.月份,B.MONTH1,T.病假,0) 病假,DECODE(T.月份,B.MONTH1,T.婚假,0) 婚假,
B.YEAR 年份,B.MONTH 月份
FROM (SELECT TO_CHAR(A.TIME, 'YYYYMM') ALL_YEAR,
A.EMPCODE 编号,A.EMPNAME 姓名,A.DEPT 部门,A.POST 职位,
TO_CHAR(A.TIME, 'YYYY') 年份,TO_CHAR(A.TIME, 'MM') 月份,
SUM(DECODE(A.TYPE,'旷工',A.DAYS,0)) 旷工,SUM(DECODE(A.TYPE,'事假',A.DAYS,0)) 事假,
SUM(DECODE(A.TYPE,'病假',A.DAYS,0)) 病假,SUM(DECODE(A.TYPE,'婚假',A.DAYS,0)) 婚假
FROM (SELECT DISTINCT(C.EMPCODE),C.EMPNAME,C.POST,C.DEPT,C.TYPE,C.TIME,C.DAYS FROM T_KAOQIN C) A
GROUP BY A.EMPCODE,A.EMPNAME,A.DEPT,A.POST,TO_CHAR(A.TIME, 'YYYY'),TO_CHAR(A.TIME, 'MM'),TO_CHAR(A.TIME, 'YYYYMM')
ORDER BY A.EMPCODE,TO_CHAR(A.TIME, 'MM')
) T,YEAR B,(SELECT DISTINCT(C.EMPCODE),C.EMPNAME,C.POST,C.DEPT FROM T_KAOQIN C) T1
WHERE B.ALL_YEAR =T.ALL_YEAR(+)
ORDER BY T1.EMPCODE,B.MONTH1
--结果
001 张三 财务部 经理0000 2011 01
001 张三 财务部 经理1000 2011 02
001 张三 财务部 经理0010 2011 03
001 张三 财务部 经理0000 2011 04
001 张三 财务部 经理0000 2011 05
001 张三 财务部 经理0000 2011 06
001 张三 财务部 经理0000 2011 07
001 张三 财务部 经理0000 2011 08
001 张三 财务部 经理0000 2011 09
001 张三 财务部 经理0000 2011 10
001 张三 财务部 经理0000 2011 11
001 张三 财务部 经理0000 2011 12
002 李四 人事部经理0000 2011 01
002 李四 人事部经理1000 2011 02
002 李四 人事部经理0010 2011 03
002 李四 人事部经理0000 2011 04
002 李四 人事部经理0000 2011 05
002 李四 人事部经理0000 2011 06
002 李四 人事部经理0000 2011 07
002 李四 人事部经理0000 2011 08
002 李四 人事部经理0000 2011 09
002 李四 人事部经理0000 2011 10
002 李四 人事部经理0000 2011 11
002 李四 人事部经理0000 2011 12