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