如何解决此查询

时间:2016-06-06 17:46:15

标签: sql

我必须在sql中使用两个表: tbl_Rooms(Room_Id,Room_Beds); tbl_AllocatedRooms(Room_Id,Bed_No);

我想得到的结果如下: 1:没有分配床铺的所有房间的清单。 2:分配一张或多张床位的房间清单也是剩余床位的数量(例如,如果我有一个room_id = 2 in tbl_Rooms,床位= 5,并且这些床中有2张被分配,我想得到剩余的床位数量床)

我已经完成了第一个,但不知道如何获得第二个。 这是我对第一个问题的查询:

 SELECT * INTO #tempUnAllocated FROM tbl_Rooms WHERE Room_Id NOT IN 
(SELECT Room_Id FROM tbl_Allocation);

2 个答案:

答案 0 :(得分:0)

这应该这样做,尽管使用CTE的解决方案可能更具可读性,如果您的RDBMS支持它们。

SELECT a.Room_Id, (SELECT Room_Beds FROM tbl_Rooms r WHERE r.Room_Id=a.Room_Id)-COUNT(*) AS unallocatedBeds
FROM tbl_allocatedRooms a
GROUP BY a.Room_Id

答案 1 :(得分:0)

SELECT A.room_id,A.room_beds,count(B.bed_no) as allocated_beds,
(A.room_beds - count(B.bed_no)) as remaining_beds
from tbl_rooms A LEFT JOIN tbl_AllocatedRooms B
ON A.room_id = B.room_id
group by A.room_id,A.room_beds
having allocated_beds < room_beds

您可以参考解决方案here