Предполагая, что ваши периоды состоят только из одной цифры, вот простой подход с использованием рекурсивного CTE:
with t as (
select v.*
from (values ('Elm High', 100, '1', 'Math'),
('Elm High', 101, '1-3', 'Eng')
) v(School, Room, Period, Class)
),
cte as (
select school, room, convert(int, left(period, 1)) as period, class, convert(int, right(period, 1)) as period_end
from t
union all
select school, room, period + 1, class, period_end
from cte
where period < period_end
)
select school, room, period, class
from cte
order by school, room, period;
и db <> скрипка .
ItНетрудно расширить это до периодов, превышающих 9. Но это похоже на множество периодов в течение школьного дня.