oracle 行列轉換

2021-06-16 14:51:17 字數 1732 閱讀 9650

wmsys.wm_concat功能來行轉列

create table idtable (id number,name varchar2(30));

insert into idtable values(10,'ab');

insert into idtable values(10,'bc');

insert into idtable values(10,'cd');

insert into idtable values(20,'hi');

insert into idtable values(20,'ij');

insert into idtable values(20,'mn');

insert into idtable values(30,'za');

insert into idtable values(30,'zb');

insert into idtable values(30,'zc');

select * from idtable

--按同乙個id,把行內容轉換為列內容

select id,wmsys.wm_concat(name) name from idtable group by id;

--每行id都把相同id的行內容轉換為列,然後根據id的排序進行內容疊加.

select id,wmsys.wm_concat(name) over (order by id) name from idtable

--按照id,name進行排名,每一行內容都彙總前一行的內容(內容疊加)

select id,wmsys.wm_concat(name) over (order by id,name) name from idtable;

--每行id都把條件相同id的行內容轉換為列內容

select id,wmsys.wm_concat(name) over (partition by id) name from idtable;

一、資料準備

sql> drop table temp;

sql> create table temp (col1 varchar2(3), col2 varchar2(200));

sql> insert into temp values('a','a,aa,aaa');

sql> insert into temp values('b','b,bb,bbb');

sql> select * from temp;

col1 col2

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

a        a,aa,aaa

b        b,bb,bbb

二、實現目的

col1 col2

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

a        a

a        aa

a        aaa

b        b

b        bb

b        bbb

三、實現方法

select col1, regexp_substr(col2, '[^,]+', 1, n) col2

from temp, (select rownum n from dual connect by rownum < 100)

where n <= length(regexp_replace(col2, '[^,]', null)) + 1

order by 1, 2

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 轉換為 語文 數學 英...