各位大虾,小弟现在正在做统计报表,遇到个问题需要大家帮忙,希望各位能帮帮小弟,问题如下
假设现在我有三张表,科室代码表,项目代码表,收费表
科室代码表中有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

解决方案 »

  1.   

    首先LZ设置收费表的金额字段默认值为0;
    然后使用下面的查询语句就可以了: 
    SELECT 科室,项目,金额 FROM tableA,tableB,tableC  
      WHERE A.WLBH = B.WLBH
      AND B.WLBH = C.WLBH 
      

  2.   

    --收费
    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 ) ccon bb.cid=cc.cid and bb.bid=cc.bid order by bb.cid
    给分吧。稍微弄点时间
      

  3.   

    应该补点分。哈哈!!好久没有玩CSDN了。突然对这个题目赶兴趣。。