您的位置:首页 > 数据库 > Oracle

oracle行转列

2015-09-07 14:04 453 查看

一、行转列

create table TEST_TABLE

(

STUDENT VARCHAR2(200),

SUBJECT VARCHAR2(200),

GRADE 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 test_table t
group by student

/*

姓名 语文 数学 英语

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

李四 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

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: