ITPub博客

首页 > 数据库 > Oracle > Oracle 开发学习篇 行列转换

Oracle 开发学习篇 行列转换

原创 Oracle 作者:zhangxiaocen 时间:2015-02-11 23:43:19 0 删除 编辑

点击(此处)折叠或打开

  1. 行列转换
  2. select deptno ,
  3. sum(decode (job, \'PRESIDENT \' ,sal,0)) PRESIDENT_job,
  4. sum(decode (job, \'MANAGER\' ,sal,0)) MANAGER_job,
  5. sum(decode (job, \'ANALYST\' ,sal,0)) ANALYST_job,
  6. sum(decode (job, \'CLERK\' ,sal,0)) CLERK_job,
  7. sum(decode (job, \'SALESMAN \',sal,0)) SALESMAN_job
  8. from emp group by deptno;




  9. select temp.dno, sum(temp.PRESIDENT_job),sum(temp.MANAGER_job),sum(temp.ANALYST_job),sum(temp.CLERK_job),sum(temp.SALESMAN_job)
  10. from(
  11. select deptno dno,
  12. (select sum(sal) from emp where job = \'PRESIDENT\' and empno = e.empno) PRESIDENT_job,
  13. (select sum(sal) from emp where job = \'MANAGER\' and empno = e.empno) MANAGER_job,
  14. (select sum(sal) from emp where job = \'ANALYST\' and empno = e.empno) ANALYST_job,
  15. (select sum(sal) from emp where job = \'CLERK\' and empno = e.empno) CLERK_job,
  16. (select sum(sal) from emp where job = \'SALESMAN\' and empno = e.empno)SALESMAN_job
  17.  from emp e) temp
  18.  group by temp.dno
  19.  order by temp.dno;


  20. select * from (
  21.     select deptno , job , sal ,
  22.     sum(sal) over (partition by deptno) sum_sal,
  23.     max(sal) over (partition by deptno) max_sal,
  24.     min(sal) over (partition by deptno) min_sal
  25.     from emp)
  26. PIVOT (
  27.  sum(sal)
  28.  for job in(
  29.      \'PRESIDENT\' AS PRESIDENT_job,
  30.      \'MANAGER\' AS MANAGER_job,
  31.      \'ANALYST\' AS ANALYST_job,
  32.      \'CLERK\' AS CLERK_job,
  33.      \'SALESMAN\' AS SALESMAN_job
  34. )
  35. );

  36. select * from (select deptno , job ,sal from emp)
  37. PIVOT XML (
  38. sum (sal)
  39. for job in (ANY)
  40. )order by deptno;






  41. select * from (
  42.     select deptno , job , sal
  43.     from emp)
  44. PIVOT (
  45.  sum(sal) AS sum_sal , max(sal) max_sal
  46.  for job in(
  47.      \'PRESIDENT\' AS PRESIDENT_job,
  48.      \'MANAGER\' AS MANAGER_job,
  49.      \'ANALYST\' AS ANALYST_job,
  50.      \'CLERK\' AS CLERK_job,
  51.      \'SALESMAN\' AS SALESMAN_job
  52. )
  53. );


  54. alter table emp ADD(sex varchar(10) default \'男\');
  55. update emp set sex=\'女\' where to_char(hiredate,\'yyyy\') = \'1981\';
  56. commit;




  57. select * from (
  58.     select deptno , job , sal ,sex
  59.     from emp)
  60. PIVOT (
  61.  sum(sal) AS sum_sal , max(sal) max_sal
  62.  for (job,sex) in(
  63.      (\'PRESIDENT\' , \'男\') AS PRESIDENT_male_job,
  64.      (\'MANAGER\',\'女\' ) AS MANAGER_female_job,
  65.      (\'ANALYST\',\'男\') AS ANALYST_male_job,
  66.      (\'CLERK\',\'女\') AS CLERK_female_job
  67. )
  68. );


  69. with temp AS (
  70. select * from (select deptno , job , sal from emp)
  71. PIVOT (
  72. sum(sal)
  73. for job in (
  74.     \'PRESIDENT\' AS PRESIDENT_job,
  75.      \'MANAGER\' AS MANAGER_job,
  76.      \'ANALYST\' AS ANALYST_job,
  77.      \'CLERK\' AS CLERK_job,
  78.      \'SALESMAN\' AS SALESMAN_job
  79. )
  80. )ORDER BY deptno
  81. )select * from temp
  82. UNPIVOT (
  83. sal_sum for job in(
  84.      PRESIDENT_job AS \'PRESIDENT\',
  85.       MANAGER_job AS \'MANAGER\',
  86.       ANALYST_job AS \'ANALYST\',
  87.       CLERK_job AS \'CLERK\',
  88.       SALESMAN_job AS \'SALESMAN\'
  89. )
  90. )ORDER BY deptno;



  91. select consult.user_id,consult.LiCai,DaiKuan,ZiXu
  92. from
  93. (select user_id, (select service_type from user_consult where service_type=3 and c.id = id)LiCai,
  94. (select service_type from user_consult where service_type=81 and c.id = id )DaiKuan,
  95. (select service_type from user_consult where service_type=79 and c.id = id)ZiXu from user_consult c)consult
  96. group by consult.user_id

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29360162/viewspace-1433840/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-12-10

  • 博文量
    3
  • 访问量
    9816