Sql 按酒店名称和月份列出的预订总数

Sql 按酒店名称和月份列出的预订总数,sql,sql-server,count,Sql,Sql Server,Count,我正在尝试编写一个SQL Server脚本,该脚本按酒店名称和入住月份显示预订总数。任何帮助都将不胜感激 以下是我正在寻找的输出类型: HotelName Month TotalReservations ============================================== Algonquin Hotel June 300 Algonquin Hotel July 275 Algonquin Hotel Aug

我正在尝试编写一个SQL Server脚本,该脚本按酒店名称和入住月份显示预订总数。任何帮助都将不胜感激

以下是我正在寻找的输出类型:

HotelName          Month     TotalReservations
==============================================
Algonquin Hotel    June      300
Algonquin Hotel    July      275
Algonquin Hotel    August    295
The Four Seasons   June      485 
The Four Seasons   July      445
The Ritz-Carlton   June      ...
以下是一些相关的表格信息:

酒店:

HotelID(PK), HotelName, HotelAddress, HotelCity, HotelState, HotelPostalCode
预约:

ReservationID(PK), GuestID, RoomID(FK), CheckinDate, NumberofNights
仅表联接需要的空间:

RoomID(PK), HotelID(FK)

您可以加入表,使用函数获取月份名称,按酒店名称和月份分组,并应用计数:


您可以加入表,使用函数获取月份名称,按酒店名称和月份分组,并应用计数:

试试这个:

select h.hotelname , 
    DATENAME(MONTH, re.checkindate) as Month, 
    count(*) as TotalReservations
from room as r 
    inner join hotel as h on r.hotelid = h.hotelid
    inner join reservation as re on r.roomid  = re.roomid
group by h.hotelname, 
    DATENAME(MONTH, re.checkindate)
如果有多个年份,则在查询的select和group by子句中替换此行

试试这个:

select h.hotelname , 
    DATENAME(MONTH, re.checkindate) as Month, 
    count(*) as TotalReservations
from room as r 
    inner join hotel as h on r.hotelid = h.hotelid
    inner join reservation as re on r.roomid  = re.roomid
group by h.hotelname, 
    DATENAME(MONTH, re.checkindate)
如果有多个年份,则在查询的select和group by子句中替换此行


那么你已经想好了吗?到目前为止你做了什么?如果预订从6月30日开始,持续5晚怎么办。那是六月份的预订吗?还是六月份一次,七月份一次?或者每晚算为1次预订;那么6月1日和7月4日?这有助于展示样本数据和所述样本数据的预期输出,正如@DavidG所说的,请展示您的努力。谢谢,JiggsJedi!正如我所说的,对于月列,我将按入住日期进行计算,因此,如果退房日期月与入住日期月不同,这并不重要。正如@DavidG所说,在要求SO为您做任何事情之前,您是否自己尝试过任何事情?您不想将2015年1月与2016年1月视为不同吗?所以您已经准备好了一些东西?到目前为止你做了什么?如果预订从6月30日开始,持续5晚怎么办。那是六月份的预订吗?还是六月份一次,七月份一次?或者每晚算为1次预订;那么6月1日和7月4日?这有助于展示样本数据和所述样本数据的预期输出,正如@DavidG所说的,请展示您的努力。谢谢,JiggsJedi!正如我所说的,对于月列,我将按入住日期进行计算,因此,如果退房日期月与入住日期月不同,这并不重要。正如@DavidG所说,在要求您这样做之前,您是否自己尝试过任何事情?您不想将2015年1月计算为与2016年1月不同吗?如果数据超过一年,则此中断假设OP将2016年1月计算为与2015年1月不同。如果数据超过一年,则此中断假设OP将2016年1月计算为与2015年1月不同,请添加为帮助提问者理解其所做的事情,请对其工作原理进行一些描述,而不是将其显示为代码转储。为帮助提问者理解其所做的事情,请添加一些关于其工作原理的描述,而不是将其显示为代码转储。
CONCAT(DATENAME(MONTH, re.checkindate), ' ',  DATENAME(YEAR, re.checkindate))
select 
    h.hotelname, 
    datename(month,res.checkindate) as month , 
    count(*) reservations 
from Hotel h 
join room rm 
    on h.hotelid=rm.hotelid
join RESERVATION res 
    on res.roomid=rm.roomid
group by h.hotelname, datename(month,res.checkindate )