日期:2014-05-16  浏览次数:20876 次

Sql语句求助,请高手来解决
各位大虾,小弟现在正在做统计报表,遇到个问题需要大家帮忙,希望各位能帮帮小弟,问题如下
假设现在我有三张表,科室代码表,项目代码表,收费表
科室代码表中有5条数据,科室1,科室2,科室3,科室4,科室5
项目代码表中有6条数据,项目1,项目2................项目6
收费表中有若干条数据,记录的是每个科室对每个项目的收费情况
比如科室1对项目1,2,3收过费,这个数据里就会有三条数据,
科室2对项目2,3,4,6收过费,这个数据里又会增加四条数据
总之就是某个科室对某个项目收过费,都会存储一条数据
如果科室5没对6个项目有过任何收费,就不会存储科室5的相关信息

现在我想统计出每个科室对应每个项目的收费情况,该科室对某个项目没收过费 就让该项目的收费金额是0
假设科室5在收费表中没有被存储上相关数据,但统计出的结果也要展示出,科室5的每个项目收费金额都是0

综上所述,统计出的结果应该有30条数据 如下
科室1 项目1 金额 10
科室1 项目2 金额 20
科室1 项目3 金额 20
科室1 项目4 金额 0
科室1 项目5 金额 0
科室1 项目6 金额 0

科室2 项目1 金额 10
科室2 项目2 金额 20
科室2 项目3 金额 0
科室2 项目4 金额 0
科室2 项目5 金额 50
科室2 项目6 金额 0

.
.
.
科室5 项目1 金额 0 
科室5 项目2 金额 0
科室5 项目3 金额 0
科室5 项目4 金额 0
科室5 项目5 金额 0
科室5 项目6 金额 0


------解决方案--------------------
--收费
create table a
(
 aid varchar(20) not null,
 bid varchar(20) not null,
 cid varchar(20) not null,
 num number
)
insert into a (aid,bid,cid,num) values ('1','1','1',12);
insert into a (aid,bid,cid,num) values ('2','1','1',12);
insert into a (aid,bid,cid,num) values ('3','1','1',12);
insert into a (aid,bid,cid,num) values ('4','1','1',12);
insert into a (aid,bid,cid,num) values ('5','1','1',12);

insert into a (aid,bid,cid,num) values ('1','2','1',12);
insert into a (aid,bid,cid,num) values ('2','3','2',12);
insert into a (aid,bid,cid,num) values ('3','3','2',12);
insert into a (aid,bid,cid,num) values ('4','4','3',12);
insert into a (aid,bid,cid,num) values ('5','5','4',12);
--项目
create table b
(
 bid varchar(20) not null
)
insert into b (bid) values ('1');
insert into b (bid) values ('2');
insert into b (bid) values ('3');
insert into b (bid) values ('4');
insert into b (bid) values ('5');
insert into b (bid) values ('6');
--科室
create table c
(
cid varchar(20) not null
)

insert into c (cid) values ('1');
insert into c (cid) values ('2');
insert into c (cid) values ('3');
insert into c (cid) values ('4');

select bb.cid,bb.bid,nvl(cc.num,0) from (select c.cid,b.bid from c CROSS join b) bb left join 
(select a.cid cid,a.bid bid, sum(a.num) num from a group by a.cid,a.bid ) cc

on bb.cid=cc.cid and bb.bid=cc.bid order by bb.cid
给分吧。稍微弄点时间