SQL select查询根据1个条件从3个表中输出结果

时间:2014-06-30 16:45:25

标签: sql

我有3张桌子:

医生

staff_no - doctor_name
50       -  smith
100      -  jones
150      -  blogs

处方

pre_no - staff_no - patient_id - start_date
100    -  50      -   10        -  01/01/2008
101    -  100     -   11        -  02/02/2009
102    -  150     -   12        -  03/03/2008

治疗

staff_no - patient_id - start_date
50       -    10      -     01/01/2008
100      -    11      -     01/02/2009
150      -    12      -     02/03/2008

我想要实现的是一个表格如下所示,具有以下条件,显示有多少人在2009年期间使用AS关键字生成最后2列的治疗和处方

staff_no - doctor_name - number_of_patients_treated - number of prescriptions_issued
100      -  Jones      -        1                    -            1

只有琼斯在2009年内发放了两种治疗药物和药物,并且他已经在第一次发生这种情况。

到目前为止,我已经提出了以下内容,但是无法想到如何将治疗和处方的日期结合起来,我也会在那里得到带有计数条件的语法错误。任何帮助都会非常感激,谢谢。

select 
   d.staff_no, doctor_name, 
   Count(t.patient_id) as number_of_different_patients_treated
from 
   doctor d 
LEFT OUTER JOIN 
   treatment t on d.staff_no = t.staff_no
WHERE 
   t.start_date LIKE '%2009%'

1 个答案:

答案 0 :(得分:0)

试试这个:

select 
   d.staff_no, 
   d.doctor_name, 
   Count(distinct t.patient_id) as [number_of_different_patients_treated],
   Count(p.patient_id) as [number of prescriptions_issued]
from doctor d 
LEFT OUTER JOIN 
   treatment t 
   on d.staff_no = t.staff_no
and year(t.start_date) = 2009 
LEFT OUTER JOIN 
   Prescription p 
   on d.staff_no = p.staff_no
and year(p.start_date) = 2009
where p.staff_no is not null or t.staff_no is not null 
group by d.staff_no, d.doctor_name
order by d.doctor_name

您可以使用LIKE'%2009'如果它真的是一个字符串(它不应该是。)或者如果它是一个日期,而不是使用year()你可以使用

t.start_date between '1/1/2009' and '12/31/2009 23:59'

不确定您是否想要独特的患者(不同)?如果没有,只需删除" distinct"。