数据库

 首页 > 数据库 > MySql > Oracle 简单的列转行

Oracle 简单的列转行

分享到:
【字体:
导读:
         摘要:需求是,统计每个部门不同工种的薪水总和。SQL> select deptno,ename,job,sal from emp;    DEPTNO ENAME      JOB             &#...

Oracle 简单的列转行

    需求是,统计每个部门不同工种的薪水总和。

SQL> select deptno,ename,job,sal from emp;
    DEPTNO ENAME      JOB              SAL
---------- ---------- --------- ----------
        20 SMITH      CLERK            800
        30 ALLEN      SALESMAN        1600
        30 WARD       SALESMAN        1250
        20 JONES      MANAGER         2975
        30 MARTIN     SALESMAN        1250
        30 BLAKE      MANAGER         2850
        10 CLARK      MANAGER         2450
        20 SCOTT      ANALYST         3000
        10 KING       PRESIDENT       5000
        30 TURNER     SALESMAN        1500
        20 ADAMS      CLERK           1100
        30 JAMES      CLERK            950
        20 FORD       ANALYST         3000
        10 MILLER     CLERK           1300
已选择14行。

SQL> select deptno,
           nvl(sum(decode(job, 'MANAGER', sal)), 0) "s_MANAGER",
           nvl(sum(decode(job, 'ANALYST', sal)), 0) "s_ANALYST",
           nvl(sum(decode(job, 'CLERK', sal)), 0) "s_CLERK",
           nvl(sum(decode(job, 'PRESIDENT', sal)), 0) "s_PRESIDENT",
           nvl(sum(decode(job, 'SALESMAN', sal)), 0) "s_SALESMAN"
      from emp
     group by deptno;
    DEPTNO  s_MANAGER  s_ANALYST    s_CLERK s_PRESIDENT s_SALESMAN
---------- ---------- ---------- ---------- ----------- ----------
        30       2850          0        950           0       5600
        20       2975       6000       1900           0          0
        10       2450          0       1300        5000          0


SQL> select deptno,
           nvl(sum(case job when 'MANAGER' then sal else null end), 0) "s_MANAGER",
           nvl(sum(case job when 'ANALYST' then sal else null end), 0) "s_ANALYST",
           nvl(sum(case job when 'CLERK' then sal else null end), 0) "s_CLERK",
           nvl(sum(case job when 'PRESIDENT' then sal else null end), 0) "s_PRESIDENT",
           nvl(sum(case job when 'SALESMAN' then sal else null end), 0) "s_SALESMAN"
      from emp
     group by deptno;

    DEPTNO  s_MANAGER  s_ANALYST    s_CLERK s_PRESIDENT s_SALESMAN
---------- ---------- ---------- ---------- ----------- ----------
        30       2850          0        950           0       5600
        20       2975       6000       1900           0          0
        10       2450          0       1300        5000          0

Oracle 简单的列转行
分享到:
ORA-38760: This database instance fail...
ORA-38760: This database instance failed to turn on flashback database 第三篇ORA-38760: This database instance failed to turn on flashback database  第三篇   第一篇 第二篇 问题现象:      在数据库alert告警日志中看见如下信息: Completed: ALTER DATABASE MOUNT Wed Nov 19 04:57:28 2014 alter dat...
PL/SQL 异常错误处理
PL/SQL 异常错误处理 异常错误处理 一个优秀的程序都应该能够正确处理各种出错情况,并尽可能从错误中恢复。ORACLE 提供异常情况(EXCEPTION)和异常处理(EXCEPTION HANDLER)来实现错误处理 ①有三种类型的异常错误: 1. 预定义( Predefined )错误     ORACLE预定义的异常情况大约有24个。对这种异常情况的处理,无...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……