2017-01-01 55 views
1

我有三个表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 
    4     |   4 

每天有8位移位。每班有一名医生,每班需要一批护士。护士按照医生的日程安排工作。我只想计算12-30-2016中没有足够护士的班次数。我的功能是:get_shift_need_nurse(String date){}结果应该是:

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 

由于12-30-2016移位数1和移位数2不必在每个房间足够的护士。 doctor_schedule_id =4没有结果,在nurse_schedule_id =4

回答

0
COUNT(CASE WHEN nurse_needed = nurse_have_in_room then 1 ELSE NULL END) as "HasEnoughNurses" 
0

SQL有足够的护士:

Select d.DOCTOR_SCHEDULE_ID, d.ROOM_ID, d.DT, d.SHIFT, r.ROOM_ID, r.NURSE_NEEDED, Count(*) nurse_have_in_room 
    From doctor_schedule d 
     Join room r on d.room_id = r.room_id 
     Join nurse_schedule n On d.doctor_schedule_id = n.doctor_schedule_id 
    Group by d.DOCTOR_SCHEDULE_ID, d.ROOM_ID, d.DT, d.SHIFT, r.ROOM_ID, r.NURSE_NEEDED 
    Having Count(*) < r.NURSE_NEEDED 

测试结果:

1 3 3 12-30-2016 2 3 2 1 
2 1 1 12-30-2016 1 1 3 2 
+0

可是,当桌子'nurse_schedule'空,查询不要显示任何'DOCTOR_SCHEDULE'记录需要更多护士 – tuanptit

相关问题