Oracle 行轉列與列轉行

2021-08-27 17:27:22 字數 1176 閱讀 8671

oracel 行轉列與列轉行

一、 列轉行

1. 使用函式:wm_concat()

2. 函式說明:該函式將某一列,根據條件轉換成一行(相當於把列裡的值合併,並用逗號區分各個值)

3. 例子:

表 testt 中有資料如下所示:

xh  age

1    11

1    12

1    13

2    21

2    22

3    31

sql:

select t.xh, wm_concat(t.age) age from testt t group by t.xh;

查詢結果如下所示:

xh  age

1    11,12,13

2    21, 22

3    31

ps: wm_concat() 函式還可以與 over\order by 聯合使用, 這裡不再複述, 感興趣的可以去查詢了解一下。

二、 行轉列

1. 使用函式: regexp_substr()、regexp_replace()、level(connect by)、length()

2. 原理說明: 使用level...connect by.. 和 length() 來控制轉換後列的數量

使用regexp_substr()控制如何拆分

3. 例子:

現有資料如下:

11,12,13

sql:

select regexp_substr('11,12,13', '[^,]+', 1, level) age from dual

connect by level <= (

length('11,12,13') - length(regexp_replace('11,12,13', ',', '')) + 1);

轉換後的結果如下所示:

age11

1213

ps: 這裡使用到了正規表示式,有興趣的可以看下這篇文章:

oracle行轉列 列轉行

一 行轉列 需要將如下格式 轉換為 這就是最常見的行轉列,主要原理是利用decode函式 聚集函式 sum 結合group by分組實現的 create table test id varchar2 255 primary key not null,name varchar2 255 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...