关于Oracle中的基本行转列用法,暂时了解的是两个函数:decode和case when函数,用法如下:
首先是表格代码:
1 create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int); 2 insert into tb values(‘张三‘ , ‘语文‘ , 74); 3 insert into tb values(‘张三‘ , ‘数学‘ , 83); 4 insert into tb values(‘张三‘ , ‘物理‘ , 93); 5 insert into tb values(‘李四‘ , ‘语文‘ , 74); 6 insert into tb values(‘李四‘ , ‘数学‘ , 84); 7 insert into tb values(‘李四‘ , ‘物理‘ , 94);
1、使用decode函数实现:
1 select 姓名 , 2 max(decode(课程 , ‘语文‘,分数)) 语文, 3 max(decode(课程 , ‘数学‘,分数)) 数学, 4 max(decode(课程 , ‘物理‘,分数)) 物理, 5 avg(分数) 平均分, 6 sum(分数) 总分 7 from tb 8 group by 姓名
2、使用case when实现:
1 select 姓名, 2 sum(case 课程 when ‘语文‘ then 分数 else 0 end) 语文, 3 sum(case 课程 when ‘数学‘ then 分数 else 0 end) 数学, 4 sum(case 课程 when ‘物理‘ then 分数 else 0 end) 物理, 5 avg(分数) 平均分, 6 sum(分数) 总分 7 from tb 8 group by 姓名
需要注意的是,上面的两种是在Oracle中使用的,如果在sqlserver中实现的话,就只能用case when语句实现,不能用decode函数实现
原文:http://www.cnblogs.com/csschn/p/4961660.html