Welcome 微信登录

首页 / 数据库 / MySQL / 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位 方法  http://www.linuxidc.com/Linux/2012-03/55759.htm在CentOS 6.4下安装Oracle 11gR2(x64) http://www.linuxidc.com/Linux/2014-02/97374.htmOracle 11gR2 在VMWare虚拟机中安装步骤 http://www.linuxidc.com/Linux/2013-09/89579p2.htmDebian 下 安装 Oracle 11g XE R2 http://www.linuxidc.com/Linux/2014-03/98881.htmOracle导入导出expdp IMPDP详解 http://www.linuxidc.com/Linux/2014-04/99932.htmOracle 10g expdp导出报错ORA-4031的解决方法 http://www.linuxidc.com/Linux/2014-04/99842.htm更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12本文永久更新链接地址