Oracle转置

一.行转列

1.初始化数据(建表TEST):

-- Create table
create table TEST
(
  name    VARCHAR2(50),
  subject VARCHAR2(50),
  score   INTEGER
)

插入数据:

insert into TEST (NAME, SUBJECT, SCORE)
values ('张三', '数学', 88);

insert into TEST (NAME, SUBJECT, SCORE)
values ('张三', '英语', 90);

insert into TEST (NAME, SUBJECT, SCORE)
values ('张三', '化学', 87);

insert into TEST (NAME, SUBJECT, SCORE)
values ('李四', '数学', 84);

insert into TEST (NAME, SUBJECT, SCORE)
values ('李四', '英语', 67);

insert into TEST (NAME, SUBJECT, SCORE)
values ('李四', '化学', 92);

数据如下图:

image

最常见的行转列,主要原理是利用decode函数、聚集函数(sum),结合group by分组实现的,具体的sql如下:

select t.name,   
  sum(decode(t.subject, '化学', score,0))  化学,   
  sum(decode(t.subject, '数学', score,0))  数学,   
  sum(decode(t.subject, '英语', score,0))  英语   
from test t   
group by t.name

查询结果:

image

你可能感兴趣的:(Oracle转置)