something like;With Time_Slots(Start,[End])AS(SELECT cast('00:00' as datetime),cast('00:30' as datetime) union allSELECT DATEADD(mi,30,Start),DATEADD(mi,30,[ENd])FROM Time_SlotsWHERE DATEADD(mi,30,[ENd])<1),[Days]([Day])AS(SELECT 1 AS [Day]union allSELECT [Day]+1FROM [Days]WHERE [Day]+1<=7)select Channel ,[Day],CAST(Start as Time) AS Start,CAST([End] as Time) AS [End]from (SELECT DISTINCT Channel FROM YourTable)tCROSS JOIN [Days] dCROSS JOIN Time_Slots tORDER BY Channel ,[Day],Start,[End]------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/