Вы можете использовать рекурсивный CTE в Oracle. Синтаксис:
with recursive r_cte(rn, sex, value, from, to) as (
select rn, sex, value, from, to
from t
union all
select rn, sex, value, from + 1, to
from r_cte r
where from < to
)
select rn, sex, value, from
from r_cte
order by rn, from;
Конечно, from
и to
являются ужасными именами столбцов - потому что это ключевые слова SQL. Если это настоящие имена, их следует экранировать.
Более традиционный метод - создать список чисел и затем использовать их:
with n as (
select level - 1 as n
from (select max(t - f + 1) as range
from t
) t
connect by level <= range
)
select rn, sex, value, f + n
from t join
n
on n <= (t - f)
order by rn, f + n;
Здесь является скриптом db <> для этого метода.