2016-12-31 34 views
0

我有三個表SQL - 使用條件獲取每個不同值的計數?

**room** 
    room_id | nurse_needed 
    ---------------------- 
    1  | 3 
    2  | 1 
    3  | 2 


**doctor_schedule** 
    doctor_schedule_id| room_id | date  |shift 
    ------------------------------------------------- 
      1   | 1  |12-30-2016| 1 
      2   | 2  |12-31-2016| 2 
      3   | 3  |12-30-2016| 2 
      4   | 2  |12-30-2016| 2 
*nurse_schedule* 
    nurse_schedule_id | doctor_schedule_id 
    -------------------------------------- 
    1     |   1   
    2     |   1   
    3     |   3 

在房間每班有一名醫生和每個班次需要一些nurse.Nurses的醫生的日程安排工作。我想要統計12-30-2016中沒有足夠護士的班次數。結果應該是:

doctor_schedule_id| room_id | date  |shift | nurse_needed|nurse_have_in_room 
    ------------------------------------------------------------------------------ 
      1   | 1  |12-30-2016| 1 |  3  | 2 
      3   | 3  |12-30-2016| 2 |  2  | 1 
      4   | 2  |12-30-2016| 2 |  1  | 0 
+0

爲什麼doctor_schedule_id 4不在結果中? – GurV

+0

因爲它已經roon_id = 2需要進行1名護士,在(nurse_schedule_id = 4)具有(doctor_schedule_id = 4) – tuanptit

+0

其中'nurse_have_in_room'從何而來? –

回答

1

您可以INNER JOIN所有的表像這樣和過濾掉在需要護士數的那些小於或等於它們已經存在的數量。

select d.doctor_schedule_id, 
    d.room_id, 
    d.date, 
    d.shift, 
    r.nurse_needed, 
    COUNT(distinct n.nurse_schedule_id) nurse_have_in_room 
from doctor_schedule d 
inner join room r on r.room_id = d.room_id 
left outer join nurse_schedule n on d.doctor_schedule_id = n.doctor_schedule_id 
where d.date = '12-30-2016' 
group by d.doctor_schedule_id, 
    d.room_id, 
    d.date, 
    d.shift, 
    r.nurse_needed 
having r.nurse_needed > COUNT(distinct n.nurse_schedule_id); 
+0

'HAVING SUM(r.nurse_needed)> COUNT(n.nurse_schedule_id)' - 這似乎是錯誤的。它應該是'HAVING r.nurse_needed> COUNT(n.nurse_schedule_id)'。 –

+0

我查詢它,結果顯示,@GurwinderSingh它顯示了同樣的結果 – tuanptit

+0

。你確定你從最新的答案運行查詢嗎?你可以再試一次嗎? – tuanptit

1

您可以加入doctor_scheduleroomnurse_schedule彙總查詢:

SELECT d.*, r.nurse_needed, n.nurses_in_room 
FROM doctor_schedule d 
JOIN room r ON d.room_id = r.room_id 
JOIN (SELECT doctor_schedule_id, COUNT(*) AS nurses_in_room 
     FROM  nurse_schedule 
     GROUP BY doctor_schedule_id) n ON 
     d.doctor_schedule_id = n.doctor_schedule_id AND 
     r.nurse_needed > n.nurses_in_room 
+0

我只想計入12-30-2016。在這一天有2換擋沒有足夠的護士轉向1和轉向2 – tuanptit

相關問題