Вы можете go для UNPIVOT, а затем PIVOT. См. Пример ниже. Я считал только понедельник, вторник. Вы можете экстраполировать то же самое на оставшиеся дни.
DECLARE @table table(Name varchar(50), ID2 DECIMAL(18,0), [Mon Hour Start] CHAR(8), [Mon Hour End] CHAR(8),
[Tue Hour Start] CHAR(8), [Tue Hour End] CHAR(8))
INSERT INTO @table values ('John',123456789,'07:45 AM','11:59 PM', '07:45 AM','11:59 PM')
select SEQ_ID, days, [DAYS_FROM],[DAYS_TO] from
(SELECT Name, id2,
CASE WHEN LEFT([day],3) = 'MON' THEN 10 WHEN LEFT([day],3) = 'TUE' THEN 20 END as SEQ_ID ,
CASE WHEN LEFT([day],3) = 'MON' THEN 'MONDAY' WHEN LEFT([day],3) = 'TUE' THEN 'TUESDAY' END as [days],
CASE WHEN RIGHT([day],3) = 'END' THEN 'DAYS_TO' ELSE 'DAYS_FROM' end DayCategory,
val FROM @table
unpivot
(
val for [Day] in ([Mon Hour Start], [Mon Hour End],[Tue Hour Start], [Tue Hour End])
) as up) as t
PIVOT
(
MAX(val)
for DayCategory in ([DAYS_FROM],[DAYS_TO])
)as pvt
+--------+---------+-----------+----------+
| SEQ_ID | days | DAYS_FROM | DAYS_TO |
+--------+---------+-----------+----------+
| 10 | MONDAY | 07:45 AM | 11:59 PM |
| 20 | TUESDAY | 07:45 AM | 11:59 PM |
+--------+---------+-----------+----------+