Oracle 11g 行列互換 pivot 和 unpivot 說明
在Oracle 11g中,Oracle 又增加了2個查詢:pivot(行轉列) 和unpivot(列轉行)
參考:http://blog.csdn.net/tianlesoftware/article/details/7060306、http://www.oracle.com/technetwork/cn/articles/11g-pivot-101924-zhs.html
google 一下,網上有一篇比較詳細的文件:http://www.oracle-developer.net/display.php?id=506
pivot 列轉行
測試資料 (id,型別名稱,銷售數量),案例:根據水果的型別查詢出一條資料顯示出每種型別的銷售數量。
1 |
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); |
分組查詢 (當然這是不符合查詢一條資料的要求的)
1 |
select name ,
sum (nums)
nums from demo
group by name
|
行轉列查詢
1 |
select *
from ( select name ,
nums from demo)
pivot ( sum (nums)
for name in ( '蘋果' 蘋果,
'橘子' ,
'葡萄' ,
'芒果' ));
|
注意: pivot(聚合函式 for 列名 in(型別)) ,其中 in(‘’) 中可以指定別名,in中還可以指定子查詢,比如 select distinct code from customers
當然也可以不使用pivot函式,等同於下列語句,只是程式碼比較長,容易理解
1 |
select *
from ( select sum (nums)
蘋果 from demo
where name = '蘋果' ),( select sum (nums)
橘子 from demo
where name = '橘子' ),
( select sum (nums)
葡萄 from demo
where
|