0

そのため、少し問題があります。ASP.NetWebサイトで、現在使用可能で使用されていないすべての部屋を表示したいと思います。私が使用していないと言うとき、私は現在その部屋に予約されている人がいないことを意味します、それでシステム日付はチェックインとチェックアウト日付のどの値の間でもありません。

私のスキーマの一部:

    CREATE TABLE "Rooms"(

    RoomNo int NOT NULL,
    RoomType nvarchar(20) NULL,
    PricePerNight money NULL,
    MaximumOccupancy int NULL,
    NoOfBeds int NULL,
    NoOfBathrooms int NULL,
    Entertainment bit NULL,
    RoomService bit NULL,
    Gym bit NULL,

    CONSTRAINT PK_Rooms PRIMARY KEY(RoomNo)
)
CREATE TABLE "Reservation"(

    ReservationID int IDENTITY (1,1) NOT NULL,
    CustomerID int NOT NULL,
    RoomNo int NOT NULL,
    CheckInDate date NOT NULL,
    CheckOutDate date NOT NULL,
    NoOfDays int NOT NULL,

    CONSTRAINT PK_Reservation PRIMARY KEY(ReservationID),

    CONSTRAINT FK_Reservation_Customers_CustID FOREIGN KEY(CustomerID)  
        REFERENCES dbo.Customers(CustomerID),

    CONSTRAINT FK_Reservation_Rooms_RoomNo FOREIGN KEY(RoomNo)
        REFERENCES dbo.Rooms(RoomNo)
)

だからここに私の考えがあります、私は次のようなSQLクエリが必要になると仮定しています:

&CheckInDate!= "予約からCheckIndateを選択"AND&CheckOutDate!="予約からCheckOutDateを選択"のすべてのFROMルームを選択します。

しかし、これにはいくつかの欠陥があります。

誰かがこれを行う方法、Sue-do-code(それを呼び出すことができます)をより実行可能にする方法を教えてもらえますか?そのようなものが機能するかどうかはわかりませんが、必然的に改善を提案できる場合は私のスキーマに。

TLDR; 誰かがチェックイン日とチェックアウト日を入力すると、利用可能なすべての部屋が返されるというクエリが必要です。

4

2 に答える 2

0

これを試して..

SELECT * FROM Rooms WHERE NOT EXISTS(SELECT * FROM Room r、Reservation rs WHERE r.RoomNo = rs.RoomNo AND GETDATE()BETWEEN rs.CheckInDate AND rs.CheckOutDate)

于 2012-09-02T19:52:18.813 に答える
0

これが私が欲しかったものです。

SELECT dbo.Rooms.RoomNo
FROM dbo.Rooms JOIN dbo.Reservation
ON (dbo.Rooms.RoomNo = dbo.Reservation.RoomNo)
WHERE '2012-01-01' NOT BETWEEN dbo.Reservation.CheckInDate AND dbo.Reservation.CheckOutDate
AND '2012-01-05' NOT BETWEEN dbo.Reservation.CheckInDate AND dbo.Reservation.CheckOutDate;

時間がかかりましたが、結局私はそれを手に入れました。whereステートメントの最初の日付は&Dateに置き換えることができます。

于 2012-09-02T20:05:21.083 に答える