Sql 按酒店名称和月份列出的预订总数
我正在尝试编写一个SQL Server脚本,该脚本按酒店名称和入住月份显示预订总数。任何帮助都将不胜感激 以下是我正在寻找的输出类型: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
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 )