2014-06-30 80 views
0

從3代表的輸出結果我有3個表:SQL選擇查詢,以基於1個標準

醫生

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年內發佈了兩種治療方法和藥物,他在1次發生時都做了這個。

到目前爲止我已經拿出了以下,但不能想到如何納入治療和處方日期,我也得到語法錯誤與計數條件在那裏。任何幫助將mucho讚賞,謝謝。

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%' 
+0

什麼數據類型是'start_date'? – Horaciux

+0

1.您需要對數據進行分組以完成計數。這意味着使用「Group By」子句。 2.日期使用日期功能。 –

+0

start_date只是一個字符串,我認爲,比較它使用「喜歡」工作正常 – user3783811

回答

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」的,如果它確實是一個字符串,或者如果它是一個日期,而不是使用一年()你可以使用

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

不知道你是否想要獨特的患者(獨特的)或不是?如果不是,只要刪除「明顯」。

+0

嗨布魯克斯,這是偉大的,唯一缺少的,我沒有指定的是,不應該包括兩列中不等於1的結果,我該如何指定? – user3783811

+0

這是一個日期,你是正確的年份功能很好。 – user3783811

+0

@ user3783811,只需將LEFT OUTER JOIN更改爲INNER JOIN,即可獲得該結果。 – AHiggins