高级查询--在线等待...............
表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
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 不同,查出不同的结果
sum(decode(bm,'部门1',sl,0)) 部门1sl,
sum(decode(bm,'部门1',je,0)) 部门1je,
......
from table1 group by mc;
sum(decode(bm,'部门1',sl,0)) 部门1sl,
sum(decode(bm,'部门1',je,0)) 部门1je,
......
from table1 where dw='01' group by mc;
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得到游标,这是你想要的,你把参数改为你的参数即可。