당신은 당신이 간단한 쿼리의 다음 공석을 얻을 필요가있는 매개 변수로 날짜를 통과 할 경우
SELECT SUM(HB_NoOfRooms) FROM Booking
WHERE HB_ChkDt <= @PassedDt AND HB_ChkODt >= @PassedDt
그러나 당신은 날짜의 범위를 통과 한 후 날짜 사이의 모든 날짜 현명한 공석을 얻으려면 복잡한 쿼리를 작성해야합니다.
UPDATE : 코드는 여러 날짜 범위에 대한 공석을 얻을 수 있습니다 :
DECLARE @strSQL NVARCHAR(MAX)
DECLARE @StartDt DATETIME
DECLARE @EndDt DATETIME
CREATE TABLE #Booking (HB_Id INT, HB_ChkDt DATETIME, HB_ChkODt DATETIME, HB_NoOfRooms INT)
INSERT INTO #Booking VALUES (61, '2011-09-07 13:00:00','2011-09-08 13:00:00',1)
INSERT INTO #Booking VALUES (67, '2011-09-27 13:00:00','2011-09-28 2:00:00',1)
INSERT INTO #Booking VALUES (68, '2011-09-27 13:00:00','2011-09-28 2:00:00',1)
INSERT INTO #Booking VALUES (69, '2011-09-28 13:00:00','2011-09-29 2:00:00',1)
SET @StartDt = '2011-09-27'
SET @EndDt = '2011-09-29'
WHILE @StartDt <= @EndDt
BEGIN
IF @strSQL IS NULL OR @strSQL = ''
SET @strSQL = 'SELECT ''' + CAST(CONVERT(VARCHAR(10),@StartDt,102) AS VARCHAR(10)) + ''' AS Dt, ISNULL(SUM(HB_NoOfRooms),0) AS Vacancy FROM #Booking WHERE CONVERT(VARCHAR(10),HB_ChkDt,102) <= ''' + CAST(CONVERT(VARCHAR(10),@StartDt,102) AS VARCHAR(10)) + ''' AND CONVERT(VARCHAR(10),HB_ChkODt,102) >= ''' + CAST(CONVERT(VARCHAR(10),@StartDt,102) AS VARCHAR(10)) + ''''
ELSE
SET @strSQL = @strSQL + ' UNION ALL SELECT ''' + CAST(CONVERT(VARCHAR(10),@StartDt,102) AS VARCHAR(10)) + ''' AS Dt, ISNULL(SUM(HB_NoOfRooms),0) AS Vacancy FROM #Booking WHERE CONVERT(VARCHAR(10),HB_ChkDt,102) <= ''' + CAST(CONVERT(VARCHAR(10),@StartDt,102) AS VARCHAR(10)) + ''' AND CONVERT(VARCHAR(10),HB_ChkODt,102) >= ''' + CAST(CONVERT(VARCHAR(10),@StartDt,102) AS VARCHAR(10)) + ''''
SET @StartDt = DATEADD(D,1,@StartDt)
END
EXEC (@strSQL)
DROP TABLE #Booking
결원이 필요한 날짜를 전달합니까? –
저장 프로 시저를 사용하여 반환 table.i를 만들 때 시작 date.in 만 제공합니다. 임시 날짜에 1을 추가합니다.이 임시 날짜를 사용하여 예약 테이블을 검색 중입니다 –
저장 프로 시저를 사용하는 경우 내 업데이트 된 답변 에서처럼 여러 날짜에 공석을 얻습니다. –