Oracle把成绩行的方式转成列

来源:互联网 发布:unity3d pid算法仿真 编辑:程序博客网 时间:2024/05/19 08:01

1、表格中有如下数据

姓名科目一月二月三月张三 语文304050张三 数学 566578张三 英语288648李四语文314151李四数学 576679李四英语298749先要转换成

姓名一月语文二月语文三月语文一月数学二月数学三月数学一月英语二月英语三月英语李四314151576679298749张三304050566578288648

2、建测试数据

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


3、处理SQL

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


0 0