程序员人生 网站导航

Oracle把成绩行的方式转成列

栏目:数据库应用时间:2015-04-21 09:19:23

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


------分隔线----------------------------
------分隔线----------------------------

最新技术推荐