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):
行转列,,其实就是将某一个字段,按照码值拆分为若干个字段,最后通过聚集函数得到相应的值。
**/