国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 数据库 > 数据库应用 > Oracle把成绩行的方式转成列

Oracle把成绩行的方式转成列

来源:程序员人生   发布时间:2015-04-21 09:19:23 阅读次数:3293次

1、表格中有以下数据

姓名 科目 1月 2月 3月
张3  语文 30 40 50
张3  数学  56 65 78
张3  英语 28 86 48
李4 语文 31 41 51
李4 数学  57 66 79
李4 英语 29 87 49
先要转换成

姓名 1月语文 2月语文 3月语文 1月数学 2月数学 3月数学 1月英语 2月英语 3月英语
李4 31 41 51 57 66 79 29 87 49
张3 30 40 50 56 65 78 28 86 48

2、建测试数据

CREATE TABLE GRADE_TABLE( STU_NAME VARCHAR(20), SUBJECT VARCHAR(20), MONTH1 INT DEFAULT 0, --1月 MONTH2 INT DEFAULT 0,--2月 MONTH3 INT DEFAULT 0 ); insert into GRADE_TABLE(STU_NAME,SUBJECT,MONTH1,MONTH2,MONTH3) values('张3','语文','30','40','50'); insert into GRADE_TABLE(STU_NAME,SUBJECT,MONTH1,MONTH2,MONTH3) values('张3','数学','56','65','78'); insert into GRADE_TABLE(STU_NAME,SUBJECT,MONTH1,MONTH2,MONTH3) values('张3','英语','28','86','48'); insert into GRADE_TABLE(STU_NAME,SUBJECT,MONTH1,MONTH2,MONTH3) values('李4','语文','31','41','51'); insert into GRADE_TABLE(STU_NAME,SUBJECT,MONTH1,MONTH2,MONTH3) values('李4','数学','57','66','79'); insert into GRADE_TABLE(STU_NAME,SUBJECT,MONTH1,MONTH2,MONTH3) values('李4','英语','29','87','49');


3、处理SQL

select stu_name,sum(1月语文 ) 1月语文 ,sum(2月语文 ) 2月语文,sum(3月语文 ) 3月语文 ,sum(1月数学 ) 1月数学 ,sum(2月数学 ) 2月数学,sum(3月数学 ) 3月数学 ,sum(1月英语 ) 1月英语 ,sum(2月英语 ) 2月英语,sum(3月英语 ) 3月英语 from( select stu_name,sum(case subject when '语文' then month1 end) as 1月语文 ,sum(case subject when '语文' then month2 end) as 2月语文 ,sum(case subject when '语文' then month3 end) as 3月语文 ,sum(case subject when '数学' then month1 end) as 1月数学 ,sum(case subject when '数学' then month2 end) as 2月数学 ,sum(case subject when '数学' then month3 end) as 3月数学 ,sum(case subject when '英语' then month1 end) as 1月英语 ,sum(case subject when '英语' then month2 end) as 2月英语 ,sum(case subject when '英语' then month3 end) as 3月英语 from GRADE_TABLE group by stu_name,subject ) group by stu_name --danielinbiti


生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生