Oracle pivot & unpivot

前端之家收集整理的这篇文章主要介绍了Oracle pivot & unpivot前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

pivot & unpivot 11g新特性

1pivot

-对的形式出现,典型的行转列报表函数

  1. createtabletest_demo(idint,namevarchar(20),numsint);----创建表
  2. insertintotest_demovalues(1,'苹果',1000);
  3. insertintotest_demovalues(2,2000);
  4. insertintotest_demovalues(3,4000);
  5. insertintotest_demovalues(4,'橘子',5000);
  6. insertintotest_demovalues(5,3000);
  7. insertintotest_demovalues(6,'葡萄',3500);
  8. insertintotest_demovalues(7,'芒果',4200);
  9. insertintotest_demovalues(8,5500);
  10. commit;
  11.  
  12. selectname,sum(nums)
  13. fromtest_demo
  14. groupbyname;
  15.  
  16. select*
  17. from(selectname,numsfromtest_demo)
  18. pivot(sum(nums)
  19. fornamein('苹果','芒果'));
  20.  
  21. sql>select*
  22. 2from(selectname,numsfromtest_demo)
  23. 3pivot(sum(nums)
  24. 4fornamein('苹果'as"苹果",'芒果'));--别名使用
  25. 苹果'橘子''葡萄''芒果'
  26. ----------------------------------------
  27. 7000800035009700

这里再说语法:

pivot聚合函数 for 列名 in 类型 ,其中 in 中可以指定别名in中还可以指定子查询,比如 select distinct code from customers

2unpivot

典型的列转行报表函数

  1. createtableFruit(idint,Q1int,Q2int,Q3int,Q4int);
  2. 这里Q1int,Q4int表示四季度。
  3. insertintoFruitvalues(1,1000,2000,3300,5000);
  4. insertintoFruitvalues(2,3000,3200,1500);
  5. insertintoFruitvalues(3,'香蕉',2500,3500,2200,2500);
  6. insertintoFruitvalues(4,1500,1200,3500);
  7. commit;
  8. select*fromFruit;
  9.  
  10. selectid,name,quarter,sellfromFruitunpivot(sellforquarterin(q1,q2,q3,q4));

注意:unpivot没有聚合函数quartersell字段也是临时的变量。

这里sell统计值,quarter表示季度及类型。

执行结果:

  1. sql>selectid,q4));
  2. IDNAMEQUARTERSELL
  3. ---------------------------------------------------------------------------------------------------------
  4. 1苹果Q11000
  5. 1苹果Q22000
  6. 1苹果Q33300
  7. 1苹果Q45000
  8. 2橘子Q13000
  9. 2橘子Q23000
  10. 2橘子Q33200
  11. 2橘子Q41500
  12. 3香蕉Q12500
  13. 3香蕉Q23500
  14. 3香蕉Q32200
  15. 3香蕉Q42500
  16. 4葡萄Q11500
  17. 4葡萄Q22500
  18. 4葡萄Q31200
  19. 4葡萄Q43500

猜你在找的Oracle相关文章