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

用Oracle的decode函数开展列转行

2012-09-04 
用Oracle的decode函数进行列转行----------------------------------------------------------------测试

用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;

热点排行