oracle 11g 行列互換 pivot 和 unpivot 說明
在oracle 11g中,oracle 又增加了2個查詢:pivot(行轉列) 和unpivot(列轉行)
參考:
google 一下,網上有一篇比較詳細的文件:
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 name, sum(nums) nums from demo group by name
行轉列查詢
select * from (select name, nums from demo) pivot (sum(nums) for name in ('蘋果' 蘋果, '橘子', '葡萄', '芒果'));
注意: pivot(聚合函式 for 列名 in(型別)) ,其中 in('') 中可以指定別名,in中還可以指定子查詢,比如 select distinct code from customers
unpivot 行轉列
顧名思義就是將多列轉換成1列中去
案例:現在有乙個水果表,記錄了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 * from fruit
列轉行查詢
select id , name, jidu, xiaoshou from fruit unpivot (xiaoshou for jidu in (q1, q2, q3, q4) )
注意: unpivot沒有聚合函式,xiaoshou、jidu欄位也是臨時的變數
Oracle行列互換總結
oracle行列互換總結 1.多行換成一行 col1 col2 col1 col2 a 1 a 2 轉換後 a 1,2,3 a 3 a.sys connect by path 函式 select name,ltrim max sys connect by path userid,userid fro...
Oracle筆記 之 行列互換
pivot函式 行轉列函式 格式pivot 任一聚合函式 for 需專列的值所在列名 in 需轉為列名的值 pivot函式位於from集合後 示例示例1 select from emp pivot sum nvl sal,0 for deptno in 10 as accounting,20as r...
SQL(行列互換)
有乙個sql題在面試中出現的概率極高,最近有學生出去面試仍然會遇到這樣的題目,在這裡跟大家分享一下。題目 資料庫中有一張如下所示的表,表名為sales。年 季度銷售量 1991111 1991212 1991313 1991414 1992121 1992222 1992323 1992424 要求...