oracle 数据库
表一:b1
dwbh--单位编号  主键
dwmc--单位名称  
bars--备案人数
表二: b2
grbh--个人编号 主键
dwbh--单位编号
表三: b3
dwbh--单位编号 主键
gebh--个人编号 主键
jfrq--缴费日期 主键现在我要查询出这样的结果
单位名称---备案人数条件是:某个单位下的人员一年只能缴费一次,而且如果这个单位下的人员如果都缴费过了的就不显示出来。比如b1,b3中有一个共同的单位编号110, 如果单位110在b3中的个人编号总数等于b1中备案人数说明110这个单位已经没有可缴费的人,这样的话就不显示出来。
大家帮帮忙!谢谢

解决方案 »

  1.   

    select dwbh,dwmc from b1
    where b1.dwbh in( select b1.dwbh from b1, (select dwbh,count(grbh) jfrs from b3 group by dwbh) o
    where b1.dwbh=o.dwbh and b1.bars>o.jfrs)
      

  2.   

    楼主想要的结果只是查出那些一年内还有人没缴费的单位名称和它的备案人数就行吗?select b1.dwmc,b.bars
      from b1,(select dwbh,count(gebh) cnt from b3 group by dwbh) b
     where b1.dwbh=b.dwbh(+) and (b1.bars>b.cnt or b.cnt is null)顺便说一句,这表结构的设计有点问题,既然有了B2,那么B3里应该不需要出现单位编码这个字段了
      

  3.   

    不是这个意思的 ,我这几个表里面都还有其他字段,我只是为了简单一点才没写出来。
    上面的SQL是否能实现我预期的结果明天我验证一下。