oracle行轉列 列轉行

2021-09-01 17:23:57 字數 1793 閱讀 8666

一、行轉列

需要將如下格式

轉換為:

這就是最常見的行轉列,主要原理是利用decode函式、聚集函式(sum),結合group by分組實現的

create table test(

id varchar2(255) primary key not null,

name varchar2(255),

course varchar2(255),

score varchar2(255)

);insert into test values(sys_guid(),'zhangsan','語文',85);

insert into test values(sys_guid(),'zhangsan','數學',78);

insert into test values(sys_guid(),'zhangsan','英語',90);

insert into test values(sys_guid(),'lisi','語文',73);

insert into test values(sys_guid(),'lisi','數學',84);

insert into test values(sys_guid(),'lisi','英語',92);

行轉列sql語句為:

select t.name, 

sum(decode(t.course, '語文', score,null)) as chinese,

sum(decode(t.course, '數學', score,null)) as math,

sum(decode(t.course, '英語', score,null)) as english

from test t

group by t.name

order by t.name

二、列轉行

將如下格式

轉換為

這就是最常見的列轉行,主要原理是利用sql裡面的union

create table test(

id varchar2(255) primary key not null,

name varchar2(255),

ch_score varchar2(255),

math_score varchar2(255),

en_score varchar2(255)

);insert into test values(sys_guid(),'zhangsan',88,76,90);

insert into test values(sys_guid(),'lisi',91,67,82);

列轉行sql語句為:

select name, '語文' course , ch_score as score from test  

union select name, '數學' course, math_score as score from test

union select name, '英語' course, en_score as score from test

order by name,course

行轉列 列轉行 oracle滴

今天做寫sql的時候遇到了列轉行的問題,以前寫過,下面是找到的方法,大家複習一下吧。列轉行 create table test name char 10 km char 10 cj int insert test values 張三 語文 80 insert test values 張三 數學 86...

Oracle行轉列和列轉行

1.1 初始測試資料 表結構 test tb grade sql 1 create table test tb grade 2 3 id number 10 not null,4 user name varchar2 20 char 5 course varchar2 20 char 6 score...

Oracle行轉列和列轉行

一 行轉列 1.1 初始測試資料 表結構 test tb grade sql 1 create table test tb grade 2 3 id number 10 not null,4 user name varchar2 20 char 5 course varchar2 20 char 6...