高级查询--在线等待...............
表1
dw        bm       mc        sl     je
01 部门1 计算机    1     10000
01 部门1 空调    2     20000
01 部门1    计算机    2     20000
01       部门2    打印机      1     10000
01 部门2 计算机    1     10000
01 部门3 电视机    1 4000
02 部门2 电视机    1     4000
03       部门1    计算机    1     10000
04       部门1 计算机      1     10000
要得到的查询结果是:输入dw 后(例如01)出现下面的结果
合计      部门1 部门2     部门3   .......
sl   je     sl   je sl  je     sl  je
计算机 4    40000   3    30000 1   10000 0  0    0
空调 2    20000   2    20000 0   0    0    0
打印机 1    10000   0    0 1   10000 0  0    0
电视机 1    4000     0  0        0   0       1    4000
...     ..    .....   ..   ..       ..  ......   ..   ....
根据输入的dw 不同,查出不同的结果

解决方案 »

  1.   

    select mc,count(*) 合计,
    sum(decode(bm,'部门1',sl,0)) 部门1sl,
    sum(decode(bm,'部门1',je,0)) 部门1je,
    ......
    from table1 group by mc;
      

  2.   

    select mc,count(*) 合计,
    sum(decode(bm,'部门1',sl,0)) 部门1sl,
    sum(decode(bm,'部门1',je,0)) 部门1je,
    ......
    from table1 where dw='01' group by mc;
      

  3.   

    --建立环境
    create table dali.table1(dw char(2),bm varchar2(20),mc varchar2(20),sl int,je int);
    insert into dali.table1 values('01','部门1','计算机',    1     ,10000);
    insert into dali.table1 values('01','部门1','空调',    2     ,20000);
    insert into dali.table1 values('01','部门1','计算机',    2     ,20000);
    insert into dali.table1 values('01','部门2','打印机',      1     ,10000);
    insert into dali.table1 values('01','部门2','计算机',    1     ,10000);
    insert into dali.table1 values('01','部门3','电视机',    1 ,4000);
    insert into dali.table1 values('02','部门2','电视机',    1 ,    4000);
    insert into dali.table1 values('03','部门1','计算机',    1,     10000);
    insert into dali.table1 values('04','部门1','计算机',      1,     10000);
    --调试:
    set serveroutput on
    declare
      参数 char(2) default '01';
      sqlstr varchar2(4000);
      cursor c_bm is select distinct bm from dali.table1 where dw=参数;
      TYPE my_cursor is REF CURSOR;
      c_result my_cursor;
    begin
      for v_bm in c_bm loop
        sqlstr:=sqlstr||',sum(decode(bm,'''||v_bm.bm||''',sl,0)) '||v_bm.bm;
      end loop;
      --这句做调试用
      dbms_output.put_line('select mc,count(*) 合计'||sqlstr||' from dali.table1 where dw='''||参数||''' group by mc');
      
      open c_result FOR 'select mc,count(*) 合计'||sqlstr||' from dali.table1 where dw='''||参数||''' group by mc';
    end;--上面你可以通过动态sql得到游标,这是你想要的,你把参数改为你的参数即可。