一、行转列
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
*/