oracle 11g 新特性——行列转换——pivot和unpivot
oracle 11g增加了两个行列转换的查询方式:Pivot 和 unpivot
下面举例说明其应用:
第一:行转列--pivot
SQL> select * from t;
YEARS MONTHS PRODUCT_NA SALES
---------- ---------- ---------- ----------
2008 1 A 1000
2008 1 B 1500
2008 2 A 2000
2008 2 B 3000
2008 2 C 1000
2008 3 A 3000
2008 1 A 120
---------- ---------- ---------- ----------
2008 1 A 1000
2008 1 B 1500
2008 2 A 2000
2008 2 B 3000
2008 2 C 1000
2008 3 A 3000
2008 1 A 120
已选择7行。
SQL> select * from t pivot(sum(sales) for product_name in ('A' A,'B' B,'C' C));
YEARS MONTHS A B C
---------- ---------- ---------- ---------- ----------
2008 2 2000 3000 1000
2008 1 1120 1500
2008 3 3000
---------- ---------- ---------- ---------- ----------
2008 2 2000 3000 1000
2008 1 1120 1500
2008 3 3000
如上述所示,通过使用pivot,实现了行列的汇总转换!
第二:列转行--unpivot
为了说明问题,先创建一个视图:
SQL> create or replace view pivot_t as
2 select * from t pivot(sum(sales) for product_name in ('A' A,'B' B,'C' C))
3 /
2 select * from t pivot(sum(sales) for product_name in ('A' A,'B' B,'C' C))
3 /
视图已创建。
SQL> select * from pivot_t;
YEARS MONTHS A B C
---------- ---------- ---------- ---------- ----------
2008 2 2000 3000 1000
2008 1 1120 1500
2008 3 3000
---------- ---------- ---------- ---------- ----------
2008 2 2000 3000 1000
2008 1 1120 1500
2008 3 3000
--列转行:
SQL> select * from pivot_t unpivot(sales for product_name in (A,B,C));
SQL> select * from pivot_t unpivot(sales for product_name in (A,B,C));
YEARS MONTHS P SALES
---------- ---------- - ----------
2008 2 A 2000
2008 2 B 3000
2008 2 C 1000
2008 1 A 1120
2008 1 B 1500
2008 3 A 3000
---------- ---------- - ----------
2008 2 A 2000
2008 2 B 3000
2008 2 C 1000
2008 1 A 1120
2008 1 B 1500
2008 3 A 3000
已选择6行。
如上所示,通过使用unpivot,又将行转列出来的结果集转换回来了!
点评:oracle 11g的这个新特性非常好用!省去了很多不必要的麻烦!
如果是在oracle 11g以下,要想实现行列的转换,可以参考这个链接:
http://blog.csdn.net/tianlesoftware/article/details/4704858
http://blog.csdn.net/tianlesoftware/article/details/4704858
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26977915/viewspace-734165/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26977915/viewspace-734165/