Oracle把成绩行的方式转成列
来源:程序员人生 发布时间:2015-04-21 09:19:23 阅读次数:3221次
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
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠