我必須做同樣的事情,以從選擇結果集的開始/結束時間提取小時,然後創建一個新表迭代每一個小時。
DECLARE @tCalendar TABLE
(
RequestedFor VARCHAR(50),
MeetingType VARCHAR(50),
RoomName VARCHAR(MAX),
StartTime DATETIME,
EndTime DATETIME
)
INSERT INTO @tCalendar(RequestedFor,MeetingType,RoomName,StartTime,EndTime)
SELECT req as requestedfor
,meet as meetingtype
,room as rooms
,start as starttime
,end as endtime
--,u.datetime2 as endtime
FROM mytable
DECLARE @tCalendarHours TABLE
(
RequestedFor VARCHAR(50),
MeetingType VARCHAR(50),
RoomName VARCHAR(50),
Hour INT
)
DECLARE @StartHour INT,@EndHour INT, @StartTime DATETIME, @EndTime DATETIME
WHILE ((SELECT COUNT(*) FROM @tCalendar) > 0)
BEGIN
SET @StartTime = (SELECT TOP 1 StartTime FROM @tCalendar)
SET @EndTime = (SELECT TOP 1 EndTime FROM @tCalendar)
SET @StartHour = (SELECT TOP 1 DATEPART(HOUR,DATEADD(HOUR,0,StartTime)) FROM @tCalendar)
SET @EndHour = (SELECT TOP 1 DATEPART(HOUR,DATEADD(HOUR,0,EndTime)) FROM @tCalendar)
WHILE @StartHour <= @EndHour
BEGIN
INSERT INTO @tCalendarHours
SELECT RequestedFor,MeetingType,RoomName,@StartHour FROM @tCalendar WHERE StartTime = @StartTime AND EndTime = @EndTime
SET @StartHour = @StartHour + 1
END
DELETE @tCalendar WHERE StartTime = @StartTime AND EndTime = @EndTime
END
我認爲這是關係到[這個問題](http://stackoverflow.com/questions/15285478/how-to-find-id-not-in-the-master-id-table)。你能否用你期望的結果更新這個問題,因爲我想你可能正在尋找一個'JOIN'。 – JodyT 2013-03-08 03:40:41
是的,它與這個問題有關。我正試圖解決同樣的問題。但是,我正在嘗試一種不同的方式來解決它。現在,我需要的是能夠遍歷存儲過程中的記錄集,並能夠從循環中的內部選擇中返回組合記錄集。 – 2013-03-08 04:02:23
在SQL中使用循環的原因很少。通過加入,你幾乎可以做得更好。 – 2013-03-08 05:16:56