您好,欢迎访问一九零五行业门户网

Oracle 行转列 的写法

oracle 行转列 的写法: /* drop table foo; */ /**创建一张演示的表**/ create table foo ( bbbid number(2), --主键
oracle 行转列 的写法:
/*
drop table foo;
*/
/**创建一张演示的表**/
create table foo (
    bbbid number(2),       --主键
    depid number(2),      --单位编号
    aac006 varchar2(1)  --性别  1男  2女  0未知
    constraint ck_aac006 check (aac006 = '1' or aac006 ='2' or aac006 ='0')
);
/**插入用于测试的数据**/
insert into foo values(1,1,'1');
insert into foo values(2,1,'0');
insert into foo values(3,1,'2');
insert into foo values(4,1,'2');
insert into foo values(5,2,'1');
insert into foo values(6,2,'0');
insert into foo values(7,2,'2');
insert into foo values(8,2,'2');
insert into foo values(9,3,'2');
insert into foo values(10,3,'2');
insert into foo values(11,3,'2');
/**
目标:对该表进行行转列,要得到如下结果集:
depid 男 女 未知
 1  2
 1  2
 0  3
*/
/**原始的数据**/
select * from foo;
/**按照性别码表取值,将foo.aac006转化为3列之后的值**/
select depid,
    decode(aac006,'0',1,0) 男,
    decode(aac006,'1',1,0) 女,
    decode(aac006,'2',1,0) 未知
 from  foo;
 /**在上一个结果集上进行加工,就得到行转列的结果!**/
 select depid,
    sum(decode(aac006,'0',1,0)) 男,
    sum(decode(aac006,'1',1,0)) 女,
    sum(decode(aac006,'2',1,0)) 未知
 from  foo
 group by depid;
/**
 总结(czw  20120624):
 行转列,,其实就是将某一个字段,按照码值拆分为若干个字段,最后通过聚集函数得到相应的值。
 **/
其它类似信息

推荐信息