1, the table has the following data
Name |
Subjects |
January |
February |
March |
Tom |
Chinese |
30 |
40 |
50 |
Tom |
Mathematical |
56 |
65 |
78 |
Tom |
English |
28 |
86 |
48 |
John doe |
Chinese |
31 |
41 |
51 |
John doe |
Mathematical |
57 |
66 |
79 |
John doe |
English |
29 |
87 |
49 |
The first to be converted into
Name |
January language |
February language |
March language |
January Mathematics |
February Mathematics |
March Mathematics |
January English |
February English |
March English |
John doe |
31 |
41 |
51 |
57 |
66 |
79 |
29 |
87 |
49 |
Tom |
30 |
40 |
50 |
56 |
65 |
78 |
28 |
86 |
48 |
2. Build test data
CREATE TABLE grade_table ( stu_name varchar), SUBJECT varchar, MONTH1 INT DEFAULT 0,--January MONTH2 INT default 0,--February MONTH3 INT default 0); insert into grade_table (STU_NAME,SUBJECT,MONTH1,MONTH2,MONTH3) VALUES (' Zhang San ', ' Language ', ' (') ', ' + ', ' + '), insert into grade_table (STU_NAME,SUBJECT,MONTH1,MONTH2,MONTH3) VALUES (' Zhang San ', ' math ', ' 56 ', ' (' grade_table '), insert into stu_name,subject,month1,month2,month3 values (' Zhang San ', ' English ', ' ['] ', ' + '); insert Into grade_table (STU_NAME,SUBJECT,MONTH1,MONTH2,MONTH3) VALUES (' John Doe ', ' language ', ' + ', ' a ', ') '; insert into grade_table ( STU_NAME,SUBJECT,MONTH1,MONTH2,MONTH3) VALUES (' John Doe ', ' math ', ' the ' ', ' ' "', '" ') ', ' + '), insert into grade_table (Stu_name,subject, MONTH1,MONTH2,MONTH3) VALUES (' John Doe ', ' English ', ' 29 ', ' 87 ', ' 49 ');
3. Handling SQL
Select Stu_name,sum (January languages) January language, sum (February language) February language, sum (March language) March language, sum (January math) January math, sum (February math) February math, sum (March math) March math, sum (January English January English, sum (February English) February English, sum (March English) March English from (select Stu_name,sum (case subject when ' language ' then Month1 end) as January language, sum (case Subject when ' language ' then Month2 end) as February language, sum (case subject when ' language ' then Month3 end) as March language, sum (case subject when ' number Learn ' then Month1 end ' as January math, sum (case subject when ' math ' then Month2 end) as February math, sum (case subject when ' math ' then month3 E nd) as March mathematics, sum (case subject when ' English ' then Month1 end) as January English, sum (case subject when ' English ' then Month2 end) as February English, sum ( Case subject when ' English ' then Month3 end ' as March English from Grade_table Group by Stu_name,subject] GROUP by Stu_name --danieli Nbiti
Oracle turns the results line into columns