SQL Server多个名称的最大值

SQL Server多个名称的最大值,sql,sql-server,Sql,Sql Server,我正在尝试创建一个查询,以获取有预订房间的所有最大数量,我的查询将正确返回所有内容,但当我尝试查找最大数量时,它将只返回1个结果,而不是应该显示的3个结果,它将只返回最大数量 当前结果:仅显示最多1个酒店 HotelName RoomType Room Count ------------------------------ -------------------- ----------- MGM Grand

我正在尝试创建一个查询,以获取有预订房间的所有最大数量,我的查询将正确返回所有内容,但当我尝试查找最大数量时,它将只返回1个结果,而不是应该显示的3个结果,它将只返回最大数量

当前结果:仅显示最多1个酒店

HotelName                      RoomType             Room Count
------------------------------ -------------------- -----------
MGM Grand                      Single               6
计数前的查询结果:

HotelName                      RoomType             Room Count
------------------------------ -------------------- -----------
The Mirage                     Double               3
The Palazzo                    Double               1
MGM Grand                      Double Deluxe        4
MGM Grand                      Family               2
The Mirage                     Family               4
MGM Grand                      Single               6
The Palazzo                    Suite                1
预期结果:注意:在Palazzo上,因为is有两个相同的计数,它显示两个或一个或另一个都可以工作

HotelName                      RoomType             Room Count
------------------------------ -------------------- -----------
MGM Grand                      Single               6
The Mirage                     Family               4
The Palazzo                    Suite                1
当前脚本:

SELECT h.HotelName, hr.RoomType, COUNT(*) AS 'Room Count'
FROM RESERVATIONDETAIL AS rd
JOIN ROOM r ON r.RoomID = rd.RoomID
JOIN HOTELROOMTYPE hr ON hr.HotelRoomTypeID = r.HotelRoomTypeID 
JOIN HOTEL h ON h.HotelID = hr.HotelID
WHERE rd.CheckinDate >= '140901' AND rd.CheckinDate <= '141031'
GROUP BY h.HotelName, hr.RoomType
HAVING COUNT(*) = 
(SELECT MAX(RoomCount)
FROM 
(SELECT h.HotelName, COUNT(*) AS RoomCount
FROM RESERVATIONDETAIL AS rd
JOIN ROOM r ON r.RoomID = rd.RoomID
JOIN HOTELROOMTYPE hr ON hr.HotelRoomTypeID = r.HotelRoomTypeID 
JOIN HOTEL h ON h.HotelID = hr.HotelID
WHERE rd.CheckinDate >= '140901' AND rd.CheckinDate <= '141031'
GROUP BY h.HotelName, hr.RoomType)x)
我想这会让你得到你想要的。也许有一种方法可以减少一个子查询,但我相信总体思路是:

选择d.HotelName、d.RoomType、d.[房间数量] 从…起 选择d.*,按酒店名称顺序按[Room Count]描述分区上的行数 从…起 选择h.HotelName、hr.RoomType、COUNT*作为“房间计数” 从RESERVATIONDETAIL作为rd 在r.RoomID=rd.RoomID上加入房间r 在hr.HotelRoomTypeID=r.HotelRoomTypeID上加入HOTELROOMTYPE hr 在h.HotelID=hr.HotelID上加入酒店h 其中rd.CheckinDate>='140901'和rd.CheckinDate您需要MAXCOUNT…GROUPBY HotelName如果您仅对记录进行MAXCOUNT,则将获得所有记录的最大值。通过使用group By,您可以聚合所有不同的酒店名称。