【问题标题】:Limiting records and putting restrictions限制记录和限制
【发布时间】:2014-01-31 19:54:40
【问题描述】:

我想要做的是,显示所有可以容纳学生的房间,在房间表中它有一个字段“容量”,其中指定了可以容纳的学生人数, 我的想法是选择学生的所有记录,如果在任何房间的“容量”列中发现超过规定的学生记录限制,则应用程序不应允许用户插入记录,但我不允许知道我该怎么做。我必须以某种方式为学生提供房间,如果该房间中容纳的学生人数超过可用座位,则不得在任何房间中容纳学生。

我尝试了什么:

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

这就是我得到的,这不是我需要的,

所以我需要的是,japad、hamid、asim 是一号房间的居民,只能容纳 3 名学生,我想要的是展示可以容纳新学生的房间,如果有的话与房间记录关联的学生记录多于其容量,则不得允许用户将该房间分配给学生。

【问题讨论】:

    标签: sql sql-server tsql c#-4.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
    

    【讨论】:

    • 哇哦,先生,现在只需要了解它,请先生解释一下
    【解决方案2】:
    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
    

    【讨论】:

      猜你喜欢
      • 2021-12-22
      • 2022-01-18
      • 2010-10-01
      • 1970-01-01
      • 2020-07-17
      • 2011-06-22
      • 2017-08-22
      • 2014-06-25
      • 1970-01-01
      相关资源
      最近更新 更多