2009-10-21 65 views
0

我需要幫助以書面查詢找到一個大廳的預訂系統時隙可用性..詳情如下幫助在大廳預訂日期可用性的搜索查詢寫

我有一個大廳表存儲大廳細節和存儲開始和完成訂單的時間HallBooking表..

廳 - HallId - 名稱

HallBooking - HallBookingId - HallId - BookingPersonName - 的startDateTime - EndDateTime

用戶可以通過指定起始日期時間和結束日期時間..查詢應挑選並展示大廳是否是可用於時間廳可用性搜索..

如果時間插槽不可用查詢應選擇當天持續時間相同的可用插槽並向用戶顯示。

在此先感謝 ANZ

回答

1

這是一個測試腳本,它可能讓你開始。

DECLARE @Hall TABLE 
    (
     HallID INT PRIMARY KEY , 
     HallName VARCHAR(1) 
    ) 
DECLARE @HallBooking TABLE 
    (
     HallBookingID INT PRIMARY KEY , 
     HallID INT , 
     BookingPersonName VARCHAR(10) , 
     StartDateTime DATETIME , 
     EndDateTime DATETIME 
    ) 


INSERT @Hall 
     SELECT 1 , 
       'A' 
     UNION ALL 
     SELECT 2 , 
       'B' 
     UNION ALL 
     SELECT 3 , 
       'C' 


--TEST 1 Check for available Hall 
DECLARE @HallID INT , 
    @StartDateTime DATETIME , 
    @EndDateTime DATETIME 
DECLARE @Status VARCHAR(6) 

SELECT @HallID = 1 , 
     @StartDateTime = '20091021 8:00:00' , 
     @EndDateTime = '20091021 12:00:00' 


--INSERT TestReservationCode here 

SELECT @Status = 'Open' 
FROM @Hall h 
WHERE h.HallID = @HallID 
     AND NOT EXISTS (SELECT * 
         FROM @HallBooking hb 
         WHERE h.HallID = hb.HallID 
           AND (@StartDateTime >= hb.StartDateTime 
             AND @StartDateTime < hb.EndDateTime 
             OR @EndDateTime > hb.StartDateTime 
             AND @EndDateTime <= hb.EndDateTime 
            )) 


IF @Status IS NULL 
    BEGIN 

     SELECT @Status = 'Closed' 

     SELECT * 
     FROM @Hall h 
     WHERE h.HallID <> @HallID 
       AND NOT EXISTS (SELECT * 
           FROM @HallBooking hb 
           WHERE h.HallID = hb.HallID 
             AND (@StartDateTime >= hb.StartDateTime 
               AND @StartDateTime < hb.EndDateTime 
               OR @EndDateTime > hb.StartDateTime 
               AND @EndDateTime <= hb.EndDateTime 
              )) 


    END 


SELECT @Status 

要測試保留狀態,請在上面的INSERT註釋下面插入以下代碼並重新運行。

--TestReservationCode 
INSERT INTO @HallBooking 
     (HallBookingID , 
      HallID , 
      BookingPersonName , 
      StartDateTime , 
      EndDateTime 
     ) 
VALUES (1 , -- HallBookingID - int 
      1 , -- HallID - int 
      'Stuart' , -- BookingPersonName - varchar(10) 
      '2009-10-21 10:00' , -- StartDateTime - datetime 
      '2009-10-21 12:00' -- EndDateTime - datetime 
     ) 

INSERT INTO @HallBooking 
     (HallBookingID , 
      HallID , 
      BookingPersonName , 
      StartDateTime , 
      EndDateTime 
     ) 
VALUES (2 , -- HallBookingID - int 
      2 , -- HallID - int 
      'Stuart' , -- BookingPersonName - varchar(10) 
      '2009-10-21 10:00' , -- StartDateTime - datetime 
      '2009-10-21 12:00' -- EndDateTime - datetime 
     )