大厅预订系统预订模块求助:实现大厅预订状态查询
大厅预订系统SQL查询实现求助
我正在开发一套大厅预订系统,目前在预订模块的开发上遇到了困难。现有两张数据表:Halls(大厅表)和Bookings(预订表),样例数据如下:
Halls表样例数据
id hallName hallType numSeats status --------------------------------------------- 1 Hall 1 Normal 500 active 2 Hall 2 VIP 30 active 3 Hall 3 VVIP 5 active 4 Hall 4 Normal 60 active 5 Hall 5 Normal 80 active 6 Hall 4+5 Normal 140 active
Bookings表样例数据
id custId hallId beginDate endDate time status ----------------------------------------------------------------- 1 1 1 2022-09-26 2022-09-26 morning confirmed 2 6 4 2022-09-26 2022-09-26 evening cancelled 3 4 3 2022-09-26 2022-09-26 full time pending 4 9 4 2022-09-26 2022-09-30 after noon confirmed
预订时段分为"morning"(上午)、"after noon"(下午)、"evening"(晚上)和"full time"(全天)四种。
需实现的需求
- 可按
endDate(如2022-09-26)过滤记录; - 指定
beginDate下,未取消的预订时段标记为Booked,无预订或已取消则标记为Available; - 若存在"full time"预订,该大厅三个时段均标记为
Booked; - Hall 6为Hall 4和Hall 5的组合厅,任意一个被预订则Hall 6对应时段标记为
unavailable或Booked。
预期报表样例
hallName hallType morning after noon evening ------------------------------------------------------ hall 1 Normal Booked available available hall 2 VIP available available available hall 3 VVIP Booked Booked Booked hall 4 Normal available Booked available hall 5 Normal available available available hall 6 Normal available unavailable available
我对JOIN、MERGE等SQL操作不熟悉,尝试过MERGE语句未成功;左连接的SQL语句如下:
DECLARE @date NVarchar(50) = '2022-09-26' SELECT h.id, h.hallName, h.hallType, b.time FROM Halls h LEFT JOIN Bookings b ON b.hallId=h.id WHERE b.beginDate=@date
该语句仅返回已预订大厅,去掉WHERE子句则未预订时段显示为NULL。此外需求从单日期查询改为beginDate和endDate范围查询,难度增加,特此求助。
内容的提问来源于stack exchange,提问作者Abdi fatah
相关产品推荐
相关产品推荐

