我有一个预订表,用于存储预订信息。我们允许在白天预订两个不同的时间段,让我们在工作日上午 10:30 和下午 4:00 进行预订,对于特定时间段,我们最多只能接待 50 名访客。
样本表和数据的详细信息如下所示。
根据样本数据,我们无法进行预订,2012-08-23/16:30
因为它已达到最大访客数量。
以下查询将为我提供我需要在日历上阻止特定时间的日期,以便用户可以为此日期进行预订。
SELECT
SUM(NoOfVisitors) as Total, TimeSlot, BookingDate, BookingCancelled
FROM
VisitorBooking
GROUP BY
BookingDate, TimeSlot, BookingDate, BookingCancelled
HAVING
SUM(NoOfVisitors) >= 50 AND TimeSlot = '16:30'
输出
Total TimeSlot BookingDate BookingCancelled
50 10:30 2012-08-23 0
我在编写 SQL 查询时遇到问题,该查询将检查他们是否有任何取消,并将计算并给我需要阻止的日期。我尝试了一些查询,但这并没有给我想要的结果。如果我运行上述查询,它也会显示我2012-07-20
被阻止,但由于其中一个预订已被取消,它仍有 3 位访客可用。
这个查询给了我结果,但我不完全确定这是否正确
SELECT
SUM(NoOfVisitors) as Total, TimeSlot, BookingDate, BookingCancelled
FROM
VisitorBooking
GROUP BY
BookingDate, TimeSlot, BookingDate, BookingCancelled
HAVING
(SUM(NoOfVisitors) >= 50 AND TimeSlot = '16:30' )
AND (BookingCancelled = 'false')
我迷失在这方面,我将不胜感激这方面的帮助
我不确定是否可以在不使用 CTE 查询的情况下实现这一目标。
CREATE TABLE Booking(
BookingID nvarchar(10) NOT NULL,
FirstName nvarchar(150) NULL,
LastName nvarchar(150) NULL,
Email nvarchar(150) NULL,
CompanyName nvarchar(200) NULL,
Country nvarchar(150) NULL,
Phone varchar(50) NULL,
NoOfVisitors int NULL,
BookingDate date NULL,
TimeSlot varchar(12) NULL,
BookedOn datetime NULL,
GUIDNo varchar(50) NULL,
BookingCancelled bit NULL,
)
样本数据
BookingID FirstName LastName Email CompanyName Country Phone NoOfVisitors BookingDate TimeSlot BookedOn GUIDNo BookingCancelled
---------------------------------------------------------------------------------------------------------------------------------------------------
1900221519 Mark Tailor abc@abc.com XYZ USA 111111 45 2012-07-20 10:30 2012-06-25 XXXXX false
5600515751 Michael Brown abc@abc.com XYZ UK 111111 2 2012-07-20 10:30 2012-06-25 XXXXX false
1638934678 John Lee abc@abc.com XYZ UK 111111 3 2012-07-20 10:30 2012-06-25 XXXXX true
8852224170 Lee Wong abc@abc.com XYZ China 111111 50 2012-08-23 16:30 2012-07-15 XXXXX false