高分求助-查询----在线等待

ineedtostudy 2003-10-11 09:52:56
高级查询--在线等待...............


表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 不同,查出不同的结果












...全文
21 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ineedtostudy 2003-10-12
  • 打赏
  • 举报
回复
正在测试中.....
ineedtostudy 2003-10-11
  • 打赏
  • 举报
回复
非常感谢大力,我明天到单位测试一下
晚安!
pengdali 2003-10-11
  • 打赏
  • 举报
回复
--建立环境
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得到游标,这是你想要的,你把参数改为你的参数即可。
pengdali 2003-10-11
  • 打赏
  • 举报
回复
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;
pengdali 2003-10-11
  • 打赏
  • 举报
回复
select mc,count(*) 合计,
sum(decode(bm,'部门1',sl,0)) 部门1sl,
sum(decode(bm,'部门1',je,0)) 部门1je,
......
from table1 group by mc;

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧