加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

用于ASP c中酒店房间可用性的SQL

发布时间:2020-12-16 03:45:40 所属栏目:asp.Net 来源:网络整理
导读:我有这三个表: 使用此SELECT语句: SELECT DISTINCT r.roomId,rt.roomTypeName,rt.roomTypeDesc,rt.roomTypePriceFROM Room r left join RoomType rt on r.roomTypeId=rt.roomTypeId WHERE roomStatus='Online' AND NOT EXISTS( SELECT 1 FROM Reservation
我有这三个表:

enter image description here

使用此SELECT语句:

SELECT DISTINCT r.roomId,rt.roomTypeName,rt.roomTypeDesc,rt.roomTypePrice
FROM Room r left join RoomType rt 
    on r.roomTypeId=rt.roomTypeId 
WHERE roomStatus='Online' 
     AND NOT EXISTS(
         SELECT 1 FROM Reservation b WHERE b.roomId = r.roomId 
           AND ('7/11/2015' BETWEEN b.checkInDate
           AND b.checkOutDate OR '8/11/2015' BETWEEN b.checkInDate 
           AND b.checkOutDate OR ('7/11/2015'<= b.checkInDate AND '8/11/2015' >= b.checkOutDate)))
order by rt.roomTypePrice

我得到了这个结果

enter image description here

如何计算每种房型的可用房间数,以便我可以使用[结果]中的下拉列表来允许用户选择他们想要的数量? (与Agoda.com网站类似.)

解决方法

SELECT rt.roomTypeName,count(rt.roomTypeName)
    FROM Room r left join RoomType rt 
    on r.roomTypeId=rt.roomTypeId 
    WHERE roomStatus='Online' 
         AND NOT EXISTS(
             SELECT 1 FROM Reservation b WHERE b.roomId = r.roomId 
             AND ('7/11/2015' BETWEEN b.checkInDate
             AND b.checkOutDate OR '8/11/2015' BETWEEN b.checkInDate 
             AND b.checkOutDate OR ('7/11/2015'<= b.checkInDate AND '8/11/2015' >= b.checkOutDate)))
    GROUP BY rt.roomTypeName

更多关于GROUP BY:

http://www.w3schools.com/sql/sql_groupby.asp

这基本上说’给我第1列中的每个roomTypeName以及第2列中roomTypeName不为空的所有记录的计数’

这还不是很明显,但是使用GROUP BY可以确保结果集“卷起”为不同的roomTypeName值,因此计数会应用于具有该roomTypeName值的记录的出现次数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读