2014-01-31 240 views
0

我想要做的是顯示所有有能力容納學生的房間,在房間表中它有一個「容量」字段,其中可容納的學生人數被指定, 我的想法是選擇所有學生的記錄,並檢查他們是否超過規定的學生記錄限制發現對任何房間的「容量」列,然後應用程序不應允許用戶插入記錄,但我不知道我該怎麼做。我必須讓學生住進房間,這樣,如果住在那個房間的學生人數超過可用座位,它就不能容納任何房間裏的學生。限制記錄和放置限制

我的嘗試:

select Student.StudentName,Student.RoomNumber,Rooms.RoomID 
From Student 
INNER JOIN Rooms 
ON Student.RoomNumber=Rooms.RoomId, 

這就是我得到這不是我所需要的, enter image description here

所以我需要的是,賈瓦德,哈米德,阿西是其中一個有房的居民我只能容納3名學生,我想要的是顯示有能力容納新學生的房間,如果有更多的學生記錄與房間記錄相關聯,那麼它的容量就越大,那麼用戶就不能被分配那個房間給一個學生。

回答

1

您可以通過房間組:

select r.RoomNumber, 
     r.Capacity, 
     r.Capacity - count(s.Name) as RemainingCapacity 
from Students s 
join Rooms r 
on r.RoomNumber = s.RoomNumber 
group by r.RoomNumber, r.Capacity 

這說明:

RoomNumber Capacity RemainingCapacity 
1   2   1 
2   3   -1 

有了這些值:

學生:

Name RoomNumber 
B  1 
C  2 
D  2 
E  2 
F  2 

客房:

RoomNumber Capacity 
1   2 
2   3 
+0

OK先生還是讓我試試這個,等待 –

+0

哇它的工作,先生,只是現在需要了解它,請解釋先生 –

0
select Student.StudentName,Student.RoomNumber 
where Student.RoomNumber IN 
(select Student.RoomNumber 
From Student 
INNER JOIN Rooms 
ON Student.RoomNumber=Rooms.RoomId 
Group by Student.RoomNumber, Rooms.Capacity 
having COUNT(Student.RoomNumber) <= Rooms.Capacity) t