前人的成果转帖~
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 姓名select job,sum(decode(deptno,10,sal,null)) "10",
sum(decode(deptno,20,sal,null)) "20",
sum(decode(deptno,30,sal,null)) "30",
sum(sal) "total"
from emp
group by job;

解决方案 »

  1.   

    如果DEPTNO不知道有多少怎么处理?
    在sql中可以这样
    declare @sql varchar(8000)
    set @sql = 'select JOB'
    select @sql = @sql + ', sum(case DEPTNO when ''' + DEPTNO + ''' then count(*) else 0 end) [' + DEPTNO + ']'
     from (select distinct DEPTNO from tb) as t
    select @sql = @sql + ' from tb group by JOB'
    exec(@sql)不知道oracle中怎么办?真是麻烦!!请大家帮帮忙,拿到只能写存储过程?