Sql查询以按天和最大人数检查可用性

Sql查询以按天和最大人数检查可用性,sql,sql-server,tsql,Sql,Sql Server,Tsql,您好这是我的数据库中的两个表: 我正设法让旅馆在一段时间内都有空。 在Rooms表中定义了房间类型:例如Signe:max_guests=1,Triple:max_guests=3 因此,对于10人预订,我需要类似以下内容: SELECT SUM(rooms.max_guests * av.RoomAvailable) AS maxPeople FROM av AS av INNER JOIN rooms ON av.room = rooms.ID AND av.DateofDays B

您好这是我的数据库中的两个表:

我正设法让旅馆在一段时间内都有空。 在Rooms表中定义了房间类型:例如Signe:max_guests=1,Triple:max_guests=3 因此,对于10人预订,我需要类似以下内容:

SELECT  SUM(rooms.max_guests * av.RoomAvailable) AS maxPeople 
FROM av AS av INNER JOIN rooms 
ON av.room = rooms.ID AND av.DateofDays BETWEEN '09/28/2012' AND '10/03/2012' 
GROUP BY av.userid
HAVING Count(*) >= 6
但这并不真正符合我的要求。它返回了可用的最大人数/userID。我只需要检查每个userID(酒店)每天是否有>=10(最大人数)可用

谢谢你的帮助

更新:如果我使用此查询:

SELECT  av.userid, av.DateofDays, SUM(rooms.max_guests * 

av.RoomAvailable) AS maxPeople 
FROM av AS av INNER JOIN rooms 
ON av.room = rooms.ID AND av.DateofDays BETWEEN '09/28/2012' 

AND '10/03/2012' 
GROUP BY av.userid, av.DateofDays
ORDER BY av.userid, av.DateofDays
我明白了:

只需将dateofdays添加到您的SELECT和GROUP BY中即可。这将只返回天数/hotels>=10

您必须在计数中手动输入天数

WITH cte AS (
SELECT  av.userid, av.DateofDays, SUM(rooms.max_guests * av.RoomAvailable) AS maxPeople 
FROM av AS av INNER JOIN rooms 
ON av.room = rooms.ID AND av.DateofDays BETWEEN '09/28/2012' AND '10/03/2012' 
GROUP BY av.userid, av.DateofDays
HAVING SUM(rooms.max_guests * av.RoomAvailable) >= 10 
)
select cte.userid 
from cte 
group by av.userid 
having COUNT(*) = 6

这里是你试图找到的所有房间之间的一套天数为多少人?是的,确切地说,如果每一天都有空房。它只需要返回一个用户ID,该用户ID在一天间隔内可供max_人员使用谢谢。。我也这么认为,但没有结果。。如果我去掉HAVING Count(*)>=6,那么它将显示每个用户ID在6个不同日期与max_people的6条记录,但实际上我需要显示每个日期的用户ID max_days>=10请查看更新的照片这是我得到的。我只需要显示userid 1,因为它在一整天的时间间隔内有超过10个max_的用户谢谢,但由于Count(*)>=10,我看不到任何结果,如果没有它,我会看到符合标准的结果,并且有超过10个max_的访客。。让我尝试附加一个新的照片谢谢,但我只需要返回我的用户名,每天都可用。在这种情况下,如果我删除了2012年9月29日的可用性,仍然会向我显示该列表,但2012年9月29日没有记录。如果你责怪我,你知道我为什么得到Msg 4104,16级,状态1,第1行,多部分标识符“av.userid”无法绑定吗?看到它应该是cte组。用户ID谢谢你工作得很好