Correlacionada fila de generación de consulta en Oracle
-
15-10-2019 - |
Pregunta
Dada esta partida 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
),
¿Cómo se genera un conjunto de resultados que tiene tantas filas por fila en la Sección ya que hay números entre StartUnit y EndUnit (ambos inclusive), con valores ascendente?
Es decir, me gustaría ver un conjunto de resultados de:
Section Unit
1 1
1 2
1 3
1 4
1 5
2 0
2 1
2 2
3 1
Tenga en cuenta que algunos de los valores en las Secciones CTE será parámetros, así que no es tan simple como extender mis sindicatos para el número correcto.
Actualizar
He pensado en esto un poco más y tener otra pauta. Voy a tomar cualquier respuesta que es correcta, pero estaba esperando sobre todo para alguien que posiblemente mostrar cómo hacer esto con CONNECT BY previa y sin un CTE extra en el medio ...
Me di cuenta que podía cambiar el CTE a esto:
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
)
Pero yo estoy inclinando lejos de eso aquí, ya que puede provenir de una mesa en vez de ser seleccionado de DUAL. Así que vamos a asumir las Secciones CTE es, de hecho, una simple consulta de una tabla, algo como:
SELECT Section, StartUnit, EndUnit FROM SectionData WHERE CallerID = 7
Y la pregunta original sigue en pie.
Solución
Prueba esto:
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
),
Numbers AS (
SELECT ROWNUM-1 n
FROM DUAL
CONNECT BY LEVEL < 1000
)
select section, n
from sections, numbers
where n between startunit and endunit
order by section, n;
Es posible que desee para ajustar el valor de 1000 he usado.