Oracle中用一句SQL语句实现行列转换

SQL*PLus>   desc   emp;  
    名称                                                                             是否为空?   类型  
    -----------------------------------------   --------   -----------------------  
    EMPNO                                                                                             NUMBER(4)  
    ENAME                                                                                             VARCHAR2(10)  
    JOB                                                                                                 VARCHAR2(9)  
    MGR                                                                                                 NUMBER(4)  
    HIREDATE                                                                                       DATE  
    SAL                                                                                                 NUMBER(7,2)  
    COMM                                                                                               NUMBER(7,2)  
    DEPTNO                                                                                           NUMBER(2)  
   
  SQL*PLus>   select   job,   deptno,   count(*)  
      2               from   emp  
      3               group   by   job,   deptno;  
   
  JOB                       DEPTNO       COUNT(*)  
  ---------   ----------   ----------  
  CLERK                           10                     2  
  CLERK                           20                     4  
  CLERK                           30                     2  
  ANALYST                       20                     4  
  MANAGER                       10                     2  
  MANAGER                       20                     2  
  MANAGER                       30                     2  
  SALESMAN                     30                     8  
  PRESIDENT                   10                     2  
   
  已选择9行。  
   
  SQL*PLus>   select   job,  
      2                     max(   decode(   deptno,   10,   cnt,   null   )   )   dept_10,  
      3                     max(   decode(   deptno,   20,   cnt,   null   )   )   dept_20,  
      4                     max(   decode(   deptno,   30,   cnt,   null   )   )   dept_30,  
      5                     max(   decode(   deptno,   40,   cnt,   null   )   )   dept_40  
      6                 from   (   select   job,   deptno,   count(*)   cnt  
      7                               from   emp  
      8                               group   by   job,   deptno   )  
      9             group   by   job  
    10           /  
   
  JOB                     DEPT_10         DEPT_20         DEPT_30         DEPT_40  
  ---------   ----------   ----------   ----------   ----------  
  ANALYST                                               4  
  CLERK                             2                     4                     2  
  MANAGER                         2                     2                     2  
  PRESIDENT                     2  
  SALESMAN                                                                   8  
   
  -----------------------------------------------------------------------------------  
  各位,我有如下一个工资表,如:  
        姓名     工资项       工资  
        张三     基本工资     1000  
        张三     岗位工资     2000  
        张三     效益工资       200  
        李四     基本工资     1000  
        李四     效益工资     1000  
        .......  
   
  我需要用一个SQL语句得到如下所示的结果:  
        姓名     基本工资     岗位工资     效益工资   .....  
        张三     1000             2000               200           .....  
        李四     1000                   0             1000           .....  
        ....  
   
   
  select   姓名,   sum(decode(工资项,'基本工资',工资,0))   基本工资,    
      sum(decode(工资项,'岗位工资',工资,0))   岗位工资,   ....  
  from   yourtable  
  group   by   姓名  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值