Kevin, there's some good stuff around about how to make calendar/schedule tables. Anyhow, I have a couple of questions. Do you want to see vacant time slots when there is nothing scheduled in that time slot all week? I might also re-think having separate start and end columns for each day of the week, since this will cause you to have a 'Sunday start', Sunday end', 'Monday start'... The code below will create a schedule for you to mess around with. I went ahead and put the start and end times in one column, but you can easily change that. Let us know if you have any questions.
WITH T1 (n) AS
(SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1),
Tally (n) AS (SELECT n = ROW_NUMBER() OVER (PARTITION BY a.n ORDER BY a.n)
FROM T1 a, T1 b, T1 c),
FullDay (Slots) AS
(SELECT DATEADD(minute,t.n * 15,CAST('00:00:00' AS TIME))
FROM Tally t
WHERE t.n <= 84),
Data AS
(
SELECT
l.LocationName,
s.ScheduleID,
s.LocationID,
DayOfTheWeek = DATENAME(dw,s.DayOfTheWeek),
StartTime = CAST(s.StartTime AS TIME),
EndTime = CAST(s.EndTime AS TIME),
s.ScheduleName
FROM #Schedules s INNER JOIN #Locations l
ON s.LocationId = l.LocationID
)
SELECT
fd.Slots,
LocationName,
ScheduleName,
CASE WHEN DayOfTheWeek = 'Sunday' THEN CONVERT(CHAR(5), d.StartTime) + ' - ' +
CONVERT(CHAR(5), d.EndTime)
ELSE NULL
END AS Sunday,
CASE WHEN DayOfTheWeek = 'Monday' THEN CONVERT(CHAR(5), d.StartTime) + ' - ' +
CONVERT(CHAR(5), d.EndTime)
ELSE NULL
END AS Monday,
CASE WHEN DayOfTheWeek = 'Tuesday' THEN CONVERT(CHAR(5), d.StartTime) + ' - ' +
CONVERT(CHAR(5), d.EndTime)
ELSE NULL
END AS Tuesday,
CASE WHEN DayOfTheWeek = 'Wednesday' THEN CONVERT(CHAR(5), d.StartTime) + ' - ' +
CONVERT(CHAR(5), d.EndTime)
ELSE NULL
END AS Wednesday,
CASE WHEN DayOfTheWeek = 'Thursday' THEN CONVERT(CHAR(5), d.StartTime) + ' - ' +
CONVERT(CHAR(5), d.EndTime)
ELSE NULL
END AS Thursday,
CASE WHEN DayOfTheWeek = 'Friday' THEN CONVERT(CHAR(5), d.StartTime) + ' - ' +
CONVERT(CHAR(5), d.EndTime)
ELSE NULL
END AS Friday,
CASE WHEN DayOfTheWeek = 'Saturday' THEN CONVERT(CHAR(5), d.StartTime) + ' - ' +
CONVERT(CHAR(5), d.EndTime)
ELSE NULL
END AS Saturday
FROM FullDay fd LEFT OUTER JOIN Data d
ON fd.Slots = CAST(d.StartTime AS TIME)
WHERE fd.Slots >= '09:00:00'
AND fd.Slots <= '21:00:00'
Greg
_________________________________________________________________________________________________
The glass is at one half capacity: nothing more, nothing less.