2013-02-04 26 views
0

我需要一個查詢,帶給我的表像如何從SQL Server獲取一個表,顯示一個房間全天的時間表?

7 AM | 7:30 AM | 8 AM | 8:30 AM...........|6:30 PM| 
----- --------- -------- ----- ............. ------- 
    | Booked | Booked | Booked ...........|  | 

我的表名是:zUSM_RoomReservationInfo 這是表

ReservationID RoomId StartDateTime   EndDateTime    
------------- ------- ----------------------- ----------------------- 
1    102  2013-02-01 10:00:00.000 2013-02-01 12:00:00.000 
2    201  2013-01-27 16:00:00.000 2013-01-27 17:00:00.000 
3    102  2013-02-01 14:00:00.000 2013-02-01 16:00:00.000 

的結構和數據通過給一個日期和房間ID爲輸入它應該給我像上面提到的表。

+0

我真的很困惑..我從沒有得到哪裏開始 –

+0

任何幫助在這裏:http://stackoverflow.com/questions/6111263/sql-scheduling-select-所有房間可用的給定日期範圍? – Paddy

+0

@Paddy沒有幫助那裏..我需要輸出像問題 –

回答

1

請嘗試:

DECLARE @RoomID NVARCHAR(10), @DtParam NVARCHAR(20), @dt1 DATETIME, @dt2 DATETIME, @Col NVARCHAR(MAX), @Query NVARCHAR(MAX) 
select @RoomID='102', @DtParam='01-Feb-2013', @dt1='07:00', @dt2='17:00', @Col='', @Query='' 

CREATE TABLE #table (DT DATETIME) 

while @dt1<[email protected] 
begin 
    SET @[email protected]+'['+CONVERT(CHAR(5), @dt1, 108)+'],' 
    insert into #table values (@dt1) 
    SET @dt1=dateadd(minute, 30, @dt1) 
end 

select @Col=LEFT(@Col, LEN(@Col) -1) 

set @Query='select '[email protected]+' From(
select DT, ReservationID From #table t1 left outer join (select * from zUSM_RoomReservationInfo 
where RoomID='[email protected]+' AND DATEADD(dd, 0, DATEDIFF(dd, 0, StartDateTime))=CONVERT(DATETIME, '''[email protected]+'''))t2 on t1.DT 
between CONVERT(CHAR(5), StartDateTime, 108) and CONVERT(CHAR(5), EndDateTime, 108) 

)x pivot (count(ReservationID) for DT IN ('+ @Col+'))PIV' 
exec (@Query) 

drop table #table 
+0

這是非常接近我的要求.. :)但我不需要結果中的表「zUSM_RoomReservationInfo」的信息,並且如果房間在同一天有兩個預訂,此查詢顯示兩個記錄..我希望他們成一排。 –

+1

您可以添加檢查日期的條件,請檢查編輯的答案。 – TechDo

+0

兄弟我得到兩行。我想把它放在一行 –

相關問題