wm_concat函式
首先讓我們來看看這個神奇的函式wm_concat(列名),該函式可以把列值以","號分隔起來,並顯示成一行,接下來上例子,看看這個神奇的函式如何應用準備測試資料
create table test1(id number,name varchar2(20));效果1:行轉列,預設逗號分隔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');
select wm_concat(name) name from test1;
name效果2:把結果裡的逗號替換成"|"a,b,c,d,e
select replace(wm_concat(name),',','|') from test1;效果3:按id分組合併namename
a|b|c|d|e
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) ||
sqlstr
from
user_tab_columns
where
table_name=
;
sqlstr
oracle11g行列互換pivot和unpivot
在oracle 11g中,oracle 又增加了2個查詢:pivot(pivot列轉行列轉行) 和unpivot(
行轉列)
測試資料 (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 ('蘋果' 蘋果, '橘子', '葡萄', '芒果'));unpivot行轉列蘋果'橘子'
'葡萄'
'芒果'
7000
8000
3500
9700
注意: pivot(聚合函式 for 列名 in(型別)) ,其中 in(『』) 中可以指定別名,in中還可以指定子查詢,比如 select distinct code from customers
顧名思義,就是將多行資料轉換到一列資料案例:現在有乙個水果表,記錄了4個季度的銷售數量,現在要將每種水果的每個季度的銷售情況用多行資料展示。
建立表和資料
create
table
fruit(id
int
,
name
varchar
(20), q1
int
, q2
int
, q3
int
, q4
int
);
insert
into
fruit
values
(1,
'蘋果'
,1000,2000,3300,5000);
insert
into
fruit
values
(2,
'橘子'
,3000,3000,3200,1500);
insert
into
fruit
values
(3,
'香蕉'
,2500,3500,2200,2500);
insert
into
fruit
values
(4,
'葡萄'
,1500,2500,1200,3500);
行轉列查詢
select id , name, jidu, xiaoshou from fruit unpivot (xiaoshou for jidu in (q1, q2, q3, q4) )
idname
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...