Oracle - dividir las filas de una tabla en multiples filas

 
Vista:

dividir las filas de una tabla en multiples filas

Publicado por nacogxe (3 intervenciones) el 25/11/2010 14:35:41
Hola a todos.

Quisiera dividir las filas de una tabla en multiples filas según la diferencia en años entre dos columnas.
A continuación expongo un ejemplo:

ID1 ID2 Ini_date End_date
1 1 2008-05-14 2010-09-16
1 2 2010-01-21 2010-08-26
..... ..... ............. ...................

El resultado deseado sería el siguiente:

ID1 ID2 YEAR
1 1 2008
1 1 2009
1 1 2010
1 2 2010
...... ..... .........

Gracias de antemano por las respuestas.

Un saludo.

NC
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:dividir las filas de una tabla en multiples fil

Publicado por Sergio (10 intervenciones) el 25/11/2010 22:59:55
creo que 2009 no se mostraría según tu ejemplo.

podría ayudarte un query como este:

select id1, id2, to_char(ini,'yyyy') as year
from test
union
select id1, id2, to_char(end,'yyyy') as year
from test
order by 3;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:dividir las filas de una tabla en multiples fil

Publicado por Nacogxe (3 intervenciones) el 26/11/2010 07:51:30
Hola Sergio,

gracias por tu respuesta. El problema es que la tabla desde la que parto tiene más de 3000 filas. Necesitaría calcular la diferencia de años entre las dos columnas y a partir de ahí general las nuevas filas.
Aún no he dado con la solución.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:dividir las filas de una tabla en multiples fil

Publicado por Sergio (10 intervenciones) el 26/11/2010 18:24:21
ya veo, eso se resuelve muy sencillo de la siguiente manera:

crea una tabla con los años:

SQL> select * from years;

YEAR
----
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010

11 rows selected.

SQL> select * from test;

ID1 ID2 INI END
---------- ---------- --------- ---------
1 1 01-JAN-06 31-DEC-10
1 2 01-JAN-08 31-DEC-10
1 3 01-JAN-10 31-DEC-10

SQL> select id1, id2, year
from test, years
where year >= to_number(to_char(ini, 'yyyy')) and
year <= to_number(to_char(end, 'yyyy')); 2 3 4

ID1 ID2 YEAR
---------- ---------- ----
1 1 2006
1 1 2007
1 1 2008
1 1 2009
1 1 2010
1 2 2008
1 2 2009
1 2 2010
1 3 2010

9 rows selected.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:dividir las filas de una tabla en multiples fil

Publicado por Nacogxe (3 intervenciones) el 29/11/2010 09:19:07
La verdad es que la solución es bien sencilla.

Muchas gracias!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar