读书人

用Oracle的decode函数开展列转行

发布时间: 2012-09-04 14:19:30 作者: rapoo

用Oracle的decode函数进行列转行
----------------------------------------------------------------
测试用:

CREATE TABLE TB_PAIBAN(
STIME CHAR(8),
DUTY VARCHAR(10),
SHIFT VARCHAR(10),
UNAME VARCHAR(20),
PRIMARY KEY (STIME,DUTY,SHIFT,UNAME)
);


INSERT INTO TB_PAIBAN(STIME,DUTY,SHIFT,UNAME) VALUES('20100101','岗位1','白班','其');
INSERT INTO TB_PAIBAN(STIME,DUTY,SHIFT,UNAME) VALUES('20100102','岗位1','白班','雄');
INSERT INTO TB_PAIBAN(STIME,DUTY,SHIFT,UNAME) VALUES('20100103','岗位1','白班','文');
INSERT INTO TB_PAIBAN(STIME,DUTY,SHIFT,UNAME) VALUES('20100104','岗位1','白班','其');
INSERT INTO TB_PAIBAN(STIME,DUTY,SHIFT,UNAME) VALUES('20100105','岗位1','白班','其');
INSERT INTO TB_PAIBAN(STIME,DUTY,SHIFT,UNAME) VALUES('20100106','岗位1','白班','其');
INSERT INTO TB_PAIBAN(STIME,DUTY,SHIFT,UNAME) VALUES('20100107','岗位1','白班','其');
INSERT INTO TB_PAIBAN(STIME,DUTY,SHIFT,UNAME) VALUES('20100101','岗位1','夜班','其');
INSERT INTO TB_PAIBAN(STIME,DUTY,SHIFT,UNAME) VALUES('20100102','岗位1','夜班','治');
INSERT INTO TB_PAIBAN(STIME,DUTY,SHIFT,UNAME) VALUES('20100103','岗位1','夜班','文');
INSERT INTO TB_PAIBAN(STIME,DUTY,SHIFT,UNAME) VALUES('20100104','岗位1','夜班','其');
INSERT INTO TB_PAIBAN(STIME,DUTY,SHIFT,UNAME) VALUES('20100105','岗位1','夜班','其');
INSERT INTO TB_PAIBAN(STIME,DUTY,SHIFT,UNAME) VALUES('20100106','岗位1','夜班','其');
INSERT INTO TB_PAIBAN(STIME,DUTY,SHIFT,UNAME) VALUES('20100107','岗位1','夜班','其');


create or replace view V_PAIBAN(岗位,班次,星期一,星期二,星期三,星期四,星期五,星期六,星期日) as
select
DUTY,
SHIFT,
MAX( DECODE( SUBSTRB(STIME,7,2),'01', UNAME ,NULL)),
MAX( DECODE( SUBSTRB(STIME,7,2),'02', UNAME ,NULL)),
MAX( DECODE( SUBSTRB(STIME,7,2),'03', UNAME ,NULL)),
MAX( DECODE( SUBSTRB(STIME,7,2),'04', UNAME ,NULL)),
MAX( DECODE( SUBSTRB(STIME,7,2),'05', UNAME ,NULL)),
MAX( DECODE( SUBSTRB(STIME,7,2),'06', UNAME ,NULL)),
MAX( DECODE( SUBSTRB(STIME,7,2),'07', UNAME ,NULL))
from
TB_PAIBAN
GROUP BY DUTY,SHIFT;


SELECT * FROM V_PAIBAN;

读书人网 >其他数据库

热点推荐