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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top