SQL Server:创建时间表

时间:2013-07-08 21:14:12

标签: sql sql-server

我有一张表记录了一天的开始和结束时间表:

ScheduleID  VenueID Date        StartTime EndTime
    1          1    14/07/2013   10:30     16:30
    2          1    15/07/2013   09:30     16:30
    3          2    16/07/2013   09:00     16:00

我需要创建一个基于开始和结束时间自填充30分钟时间段的表,所以它看起来像这样:

TimetableID VenueID    Date      Time_Slots  Client1ID    Client2ID
     1        1     14/07/2013     10:30        45           Null
     2        1     14/07/2013     11:00        67           78
     3        1     14/07/2013     11:30        104          Null
     4        1     14/07/2013     12:00        112          56

有关如何生成第二个表以便我可以简单地添加Client1ID和Clinet2ID的任何帮助将非常感激。

由于

1 个答案:

答案 0 :(得分:2)

不确定你的意思'self populating table'并且你没有说clientid来自哪里(所以我会把它留给你)。但你可以得到一个30分钟时间段的结果集,如下所示

WITH cte AS
(
  SELECT id, venue, schedule_date, 
         start_time time_slots, end_time
  FROM schedule
  UNION ALL
  SELECT schedule.id, schedule.venue, schedule.schedule_date, 
         DATEADD(MINUTE, 30, cte.time_slots) time_slots, 
         schedule.end_time
  FROM schedule
  INNER JOIN cte
          ON cte.id = schedule.id
         AND cte.time_slots < schedule.end_time
)

SELECT ROW_NUMBER() OVER(ORDER BY id, time_slots),
       venue,
       schedule_date,
       time_slots
FROM cte
ORDER BY id, time_slots

demo