限制记录和限制

时间:2014-01-31 11:44:52

标签: sql sql-server tsql c#-4.0

我想要做的是,显示所有容纳学生容量的房间,在房间表中它有一个字段“容量”,其中指定了可以容纳的学生数量, 我的想法是选择学生的所有记录,并检查他们是否在任何房间的“容量”列中找到超过规定的学生记录限制,然后App不应该允许用户插入记录,但我不知道我该怎么做。如果住在那个房间的学生人数超过可用的座位,我必须容纳学生进入房间,不得在任何房间容纳学生。

我尝试了什么:

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

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

所以我需要的是,jawad,hamid,asim是第一房间的居民,只能容纳3名学生,我非常想要的是展示有能力容纳新生的房间,如果是的话与房间记录相关的学生记录越多,那么它的容量就不允许用户将该房间分配给学生。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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