表A(namecode)
医生编号        医生姓名       科室
ZX1001          李红丹         妇科
ZX1002          赵强           内科
ZX1003          王军           皮肤科
  :              :              :
  :              :              :表B(invaliddata)
病人姓名   病症   来院日期   主治医生姓名
马立才     发烧   2006-4-3   赵强
李健       腹痛   2006-4-6   赵强
李建军     牛皮藓 2006-5-7   王军
孙立法     狼疮   2006-5-22  王军
周强       狼疮   2006-4-23  李红丹
董志安     狼疮   2006-6-23  李红丹
  :         :        :         :
  :         :        :         :
要求给定日期范围,得到每个医生在此日期范围之内治疗的病人数目。如:不限制日期则应该得出如下结果医生编号 主治医生姓名 治疗病人数
ZX1002   赵强         2
ZX1003   王军         2
ZX1001   李红丹       2如果给定的日期范围是2006-05-01 到 2006-05-31则应该得出如下结果医生编号 主治医生姓名 治疗病人数
ZX1003   王军         2

解决方案 »

  1.   

    select a.医生编号 b.主治医生姓名 count(b.病人姓名) 治疗病人数 from a,b 
    where b.主治医生姓名=a.医生姓名 and 来院日期 between 2006-05-01  and 2006-05-31
    group by a.医生编号 b.主治医生姓名
    就可以
      

  2.   

    我认为A表的记录在B表中出现几次的问题相类似,只是涉及到输入参数的问题,可以用存储过程或者函数来做吧.看看下面以前人家问的问题,可能对你有帮助
    有两个表分别为T1,T2,结构如下
    T1
    ------------
    PEID  NAME  ...T2
    ------------
    PERID PEID SEX ....其中表T2与表T1是多对一的关系,也就是T1中的主键PEID可能在T2中有多记录对应,也可以没有,
    现在求一查询语句,查询表T1中所有记录,并且关联得到它在表T2中对应的记录个数,如果为空,
    就显示为0select t2.*,decode(t1.dd,null,0,t1.dd) test
    from test t2,(select count(d) dd,d from test1 group by d) t1
    where t2.a=t1.d(+)
      

  3.   

    不指定日期:
    select 医生编号,
           医生姓名, 
          (select count(1) from 表B where 主治医生姓名=g.医生姓名)治疗病人数
    from namecode g指定日期:select 医生编号,
           医生姓名, 
          (select count(1) from 表B where 主治医生姓名=g.医生姓名 
           and 来院日期 between 2006-05-01  and 2006-05-31)治疗病人数
    from namecode g