Oracle 简单的列转行


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 单实例 从32位 迁移到 64位 方法 

在CentOS 6.4下安装Oracle 11gR2(x64)

Oracle 11gR2 在VMWare虚拟机中安装步骤

Debian 下 安装 Oracle 11g XE R2

Oracle导入导出expdp IMPDP详解

Oracle 10g expdp导出报错ORA-4031的解决方法

相关内容

    暂无相关文章