一、行转列

create table TEST_TABLE


(


VARCHAR2(200),


VARCHAR2(200),


NUMBER


)


insert into test_table(student , Subject , grade) values('张三' , '语文' , 80);


insert into test_table(student , Subject , grade) values('张三' , '数学' , 70);


insert into test_table(student , Subject , grade) values('张三' , '英语' , 60);


insert into test_table(student , Subject , grade) values('李四' , '语文' , 100);


insert into test_table(student , Subject , grade) values('李四' , '数学' , 80);


insert into test_table(student , Subject , grade) values('李四' , '英语' , 90);


commit;





select * from test_table;







STUDENT SUBJECT GRADE



---------------------------------



张三 语文 80



张三 数学 70



张三 英语 60



李四 语文 100



李四 数学 80



李四 英语 90








6 rows selected






--oracle中Decode()函数使用 然后将这些累计求和(sum部分)







select t.student AS 姓名,



sum(decode(t.subject, '语文', grade, null)) 语文,



sum(decode(t.subject, '数学', grade, null)) 数学,



sum(decode(t.subject, '英语', grade, null)) 英语



from

group by



/*



姓名 语文 数学 英语



---------- ----------- ----------- -----------



李四 100 80 90



张三 80 70 60



*/









--静只有语文、数学、英语这三门课程。



select student 姓名,



max(case subject when '语文' then grade else 0 end) 语文,



max(case subject when '数学' then grade else 0 end) 数学,



max(case subject when '英语' then grade else 0 end) 英语



from test_table group by student



/*



姓名 语文 数学 英语



---------- ----------- ----------- -----------



李四 100 80 90



张三 80 70 60



*/