С учетом этого начального CTE:
WITH Sections AS (
SELECT 1 Section, 1 StartUnit, 5 EndUnit FROM DUAL
UNION ALL SELECT 2, 0, 2 FROM DUAL
UNION ALL SELECT 3, 1, 1 FROM DUAL
),
Как создать набор результатов, который содержит столько строк в строке в разделе, сколько существует чисел между StartUnit и EndUnit (включительно) со значениями по возрастанию?
То есть, я хотел бы видеть результирующий набор:
Section Unit
1 1
1 2
1 3
1 4
1 5
2 0
2 1
2 2
3 1
Обратите внимание, что некоторые значения в CTE разделов будут параметрами, поэтому это не так просто, как расширение моегоСоюзы на нужное число.
ОБНОВЛЕНИЕ
Я подумал об этом немного больше и у меня есть другое руководство.Я возьму любой правильный ответ, но особенно надеялся, что кто-то покажет, как это сделать с помощью CONNECT BY PRIOR и без дополнительного CTE в середине ...
Я понял, что могу изменить CTEна это:
WITH Sections AS (
SELECT 1 Section, LEVEL Unit FROM DUAL CONNECT BY LEVEL <= 5
UNION ALL SELECT 2, LEVEL - 1 FROM DUAL CONNECT BY LEVEL <= 3
UNION ALL SELECT 3, 1 FROM DUAL CONNECT BY LEVEL <= 1
)
Но я склоняюсь от этого здесь, потому что он может исходить из таблицы, а не быть выбранным из ДВОЙНОГО.Итак, давайте предположим, что разделы CTE на самом деле представляют собой простой запрос из таблицы, что-то вроде:
SELECT Section, StartUnit, EndUnit FROM SectionData WHERE CallerID = 7
И оригинальный вопрос остается в силе.