Oracle行列轉換方式

2021-06-26 00:30:32 字數 2114 閱讀 5730

第一部分:行轉列

1、新建一張表:

create table score(

id int not null,

name varchar2(10) not null,

subject varchar2(50) not null,

score int

);2、插入測試資料:

insert into score values(1,'張三','語文',80);

insert into score values(1,'張三','數學',85);

insert into score values(1,'張三','英語',90);

insert into score values(2,'lisi','語文',70);

insert into score values(2,'lisi','數學',55);

insert into score values(2,'lisi','英語',60);

insert into score values(3,'王五','語文',20);

insert into score values(3,'王五','數學',30);

insert into score values(3,'王五','英語',40);

3、列出資料如下:

4、轉換資料如下:

5、轉換方式一:

通過decode來轉換:

select id,name,

sum(decode(subject,'語文',score,null)) "語文",

sum(decode(subject,'數學',score,null)) "數學",

sum(decode(subject,'英語',score,null)) "英語" 

from score group by id,name;

6、轉換方式二:

通過case when   表示式轉換:

select id,name,

sum(case when subject='語文' then score end) "語文",

sum(case when subject='數學' then score end) "數學",

sum(case when subject='英語' then score end) "英語" 

from score group by id,name;

第二部分:列轉行:

1、建表語句:

create table scores(

id int primary key,

name varchar2(10) not null,

chinese int,

math int,

english int       )

2、列出資料如下:

3、轉換出資料如下:

4、轉換方式:

a、集合查詢:

select id,name,'語文' course,chinese score from scores

union

select id,name,'數學' course,math score from scores

union

select id,name,'英語' course,english score from scores;

b、insert all方式:

create table scores_result(

id int,

name varchar2(10) not null,

course varchar2(10) not null,

score int

);insert all

into scores_result values(id,name,'語文',chinese)

into scores_result values(id,name,'數學',math)

into scores_result values(id,name,'英語',english)

select id,name,chinese,math,english from scores;

Oracle行列轉換

1.列轉行 create table t col row id int,c1 varchar2 10 c2 varchar2 10 c3 varchar2 10 insert into t col row values 1,v11 v21 v31 insert into t col row valu...

Oracle行列轉換

行轉列 select count over cnt,rn,str from select rownum rn,substr a.str,instr a.str,1,a.n 1,instr a.str,1,a.n 1 instr a.str,1,a.n 1 str from select a,b,c,...

oracle 行列轉換

q 如何實現行列轉換 a 1 固定列數的行列轉換 如student subject grade student1 語文 80 student1 數學 70 student1 英語 60 student2 語文 90 student2 數學 80 student2 英語 100 轉換為 語文 數學 英...