您的位置:首页 > 数据库 > Oracle

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

2009-09-21 12:15 381 查看
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   姓名  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql oracle manager null date