ORACLE 行转列 测试通过(9i)

来源:互联网 发布:sql默认值或绑定 编辑:程序博客网 时间:2024/05/13 13:26

--ORACLE 行转列  测试通过(9i)
/***************************************************************************************************
以学生成绩为例子,比较形象易懂
***********************************************************************************************************/
--1、行转列
--> --> 生成测试数据

drop table Class ;

Create table Class(Student varchar2(20),Course varchar2(20),Score number) ;

Insert into Class
(
select '张三','语文',78 from dual union all
select '张三','数学',87 from dual union all
select '张三','英语',82 from dual union all
select '张三','物理',90 from dual union all
select '李四','语文',65 from dual union all
select '李四','数学',77 from dual union all
select '李四','英语',65 from dual union all
select '李四','物理',85 from dual );


--case 方式:
select Student,sum(语文) 语文,sum(数学) 数学,sum(物理) 物理,sum(英语) 英语
 from(
       select  Student,       
    case Course when '语文' then Score else 0 end as 语文,
    case Course when '数学' then Score else 0 end as 数学,
    case Course when '物理' then Score else 0 end as 物理,
    case Course when '英语' then Score else 0 end as 英语
from  Class )
group by Student;

 

--decode 方式:
select student,sum(decode(Course,'语文', Score,0)) as 语文,
sum(decode(Course,'数学', Score,0)) as 数学,
sum(decode(Course,'物理', Score,0)) as 物理,
sum(decode(Course,'英语', Score,0)) as 英语
from Class
group by student;

 

drop table Class ;

原创粉丝点击