我有一个名为#MySchedule
columnsStartTime
和EndTime
的表duration
。
我需要的是一个查询,以根据持续时间列在这些 StartTime 和 EndTime 之间获取 MySchedule 中每一行的所有时间槽。
我的日程表:
create table #MySchedule
(
startTime datetime,
endtime datetime,
duration int
)
insert into #MySchedule
select '1/3/15 10:00 AM' startTime ,'1/3/15 4:00 PM' endTime ,15 duration
union all
select '1/4/15 10:00 AM' startTime ,'1/4/15 2:00 PM' endTime ,30 duration
union all
select '1/5/15 10:00 AM' startTime ,'1/5/15 4:00 PM' endTime ,45 duration
预期输出:
Slots StartTime EndTime
1 '1/3/15 10:00 AM' '1/3/15 10:15 AM'
2 '1/3/15 10:15 AM' '1/3/15 10:30 AM'
3 '1/3/15 10:30 AM' '1/3/15 10:45 AM'
4 '1/3/15 10:45 AM' '1/3/15 11:00 AM'
5 '1/3/15 11:00 AM' '1/3/15 11:15 AM'
. ... ...
. '1/3/15 3:45 PM' '1/3/15 4:00 PM'
---------------------------------------------
. '1/4/15 10:00 AM' '1/4/15 10:30 AM'
. '1/4/15 10:30 AM' '1/4/15 11:00 AM'
. ... ...
. '1/4/15 13:30 AM' '1/4/15 14:00 PM'
---------------------------------------------
. '1/5/15 10:00 AM' '1/5/15 10:45 AM'
. '1/5/15 10:45 AM' '1/5/15 11:30 AM'
. ... ...
. '1/5/15 15:15 AM' '1/5/15 16:00 PM'
这将适用于多达 100 个间隔。它可以通过添加另一个轻松扩展到 1000
CROSS JOIN inc
,依此类推 10.000 ...它假设持续时间以分钟为单位。
CROSS JOIN
CTE inc 两次并创建 10*10 行。ROW_NUMBER()
.询问:
输出: