Oracle基礎 行轉列 列轉行SQL總結

2021-08-01 03:26:59 字數 3979 閱讀 7205

wm_concat函式

首先讓我們來看看這個神奇的函式wm_concat(列名),該函式可以把列值以","號分隔起來,並顯示成一行,接下來上例子,看看這個神奇的函式如何應用準備測試資料

create table test1(id number,name varchar2(20));

insert into test1 values(1,'a');

insert into test1 values(1,'b');

insert into test1 values(1,'c');

insert into test1 values(2,'d');

insert into test1 values(2,'e');

效果1:行轉列,預設逗號分隔

select wm_concat(name) name from test1;

name

a,b,c,d,e

效果2:把結果裡的逗號替換成"|"

select replace(wm_concat(name),',','|') from test1;

name

a|b|c|d|e

效果3:按id分組合併name

select id,wm_concat(name) name from test1 group by id;

idname

1a,b,c

2d,e

select'create or replace view as select '|| wm_concat(column_name) ||sqlstrfromuser_tab_columnswheretable_name=;

sqlstr

oracle11g行列互換pivot和unpivot

在oracle 11g中,oracle 又增加了2個查詢:pivot

列轉行) 和unpivot

行轉列)

pivot列轉行

測試資料 (id,型別名稱,銷售數量),案例:根據水果的型別查詢出一條資料顯示出每種型別的銷售數量。

create table demo(id int,name varchar(20),nums int);  ---- 建立表

insert into demo values(1, '蘋果', 1000);

insert into demo values(2, '蘋果', 2000);

insert into demo values(3, '蘋果', 4000);

insert into demo values(4, '橘子', 5000);

insert into demo values(5, '橘子', 3000);

insert into demo values(6, '葡萄', 3500);

insert into demo values(7, '芒果', 4200);

insert into demo values(8, '芒果', 5500);

列轉行查詢

select * from (select name, nums from demo) pivot (sum(nums) for name in ('蘋果' 蘋果, '橘子', '葡萄', '芒果'));

蘋果'橘子'

'葡萄'

'芒果'

7000

8000

3500

9700

注意: pivot(聚合函式 for 列名 in(型別)) ,其中 in(『』) 中可以指定別名,in中還可以指定子查詢,比如 select distinct code from customers

unpivot行轉列

顧名思義,就是將多行資料轉換到一列資料

案例:現在有乙個水果表,記錄了4個季度的銷售數量,現在要將每種水果的每個季度的銷售情況用多行資料展示。

建立表和資料

createtablefruit(idint,namevarchar(20), q1int, q2int, q3int, q4int);

insertintofruitvalues(1,'蘋果',1000,2000,3300,5000);

insertintofruitvalues(2,'橘子',3000,3000,3200,1500);

insertintofruitvalues(3,'香蕉',2500,3500,2200,2500);

insertintofruitvalues(4,'葡萄',1500,2500,1200,3500);

行轉列查詢

select id , name, jidu, xiaoshou from fruit unpivot (xiaoshou for jidu in (q1, q2, q3, q4) )

id

name

jidu

xiaoshou1蘋果

q110001蘋果

q220001蘋果

q33300

......

......

注意: unpivot沒有聚合函式,xiaoshou、jidu欄位也是臨時的變數

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...