2016-12-31 35 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

相关问题