CREATE PROCEDURE [dbo].[CalendarMonthly]
(
@FROMDATE VARCHAR(25)
)
AS
BEGIN
SET NOCOUNT ON
DECLARE @ADate DATETIME
DECLARE @MonthCount INT
SET @ADate = @FROMDATE
SET @MonthCount = (SELECT DAY(EOMONTH(@ADate)))
DECLARE @tmpTable TABLE
(
TRoomID INT, DAY1 INT, DAY2 INT, DAY3 INT, DAY4 INT, DAY5 INT, DAY6 INT, DAY7 INT
)
INSERT INTO @tmpTable
SELECT RM.ROOMID,
0,0,0,0,0,0,0
FROM RoomMaster AS RM
LEFT JOIN RoomTypes AS RT ON RM.RoomTypeID = RT.RoomTypeID
WHERE RM.RoomMasterStatus <> 99
DECLARE @RoomID INT
DECLARE @ForDate DATE
DECLARE @dtFromDate DATE
DECLARE @dtToDate DATE
SET @dtFromDate = CONVERT(DATE,@FromDate)
SET @ForDate = @dtFromDate
SET @dtToDate = CONVERT(DATE,CONVERT(VARCHAR,YEAR(@dtFromDate)) +'-'+ CONVERT(VARCHAR,MONTH(DATEADD(M,1,@dtFromDate)))+'-1')
SET @dtToDate = DATEADD(D,-1,@dtToDate)
DECLARE @DayCount INT
WHILE @ForDate <= @dtToDate
BEGIN
SET @DayCount = DAY(@ForDate)
IF @DayCount = 1
BEGIN
-- Checkin
UPDATE @tmpTable SET DAY1 = 1
FROM @tmpTable TT
JOIN RoomCheckinDetails AS RCD ON RCD.RoomID = TT.TRoomID
JOIN RoomCheckinMaster AS RCM ON RCM.CheckinID = RCD.CheckinID
WHERE CONVERT(DATE,RCD.CheckinDate) = @ForDate
AND RCD.RoomID = TT.TRoomID
-- Expected Checkin
UPDATE @tmpTable SET DAY1 = 8
FROM @tmpTable TT
JOIN RoomBookingDetails AS RBD ON RBD.RoomID = TT.TRoomID
JOIN RoomBookingMaster AS RBM ON RBM.ReservationID = RBD.ReservationID
WHERE CONVERT(DATE,RBD.ExpectedCheckinDate) = @ForDate
AND RBD.RoomID = TT.TRoomID
END
ELSE IF @DayCount = 2
.
.
.
.
.
.
---upto Day count 7
SET @ForDate = DATEADD(Day,1,@ForDate)
END
SELECT * FROM @tmpTable
END
私の質問は:動的更新は
例:checkindate = 2017年4月6日、checoutdate =比較する2つの日付で2017年9月6日、私はアップデートを持っています1日1列から6列までの数値は0です。
ご入力データセットとあなたの予想出力データセットとは何ですか?主にこれを行うためにループを必要としない場合があります –
あなたの質問を書き直すのに役立つネイティブの英語スピーカーがありますか?私はあなたが何を求めようとしているのか分かりません。 –