Consulta traer un campo

Hola soy gustavo
Y quiersieras que me ayudes en lo siguiebnte
Tengo una tabla en donde tengo que traer unas fechas pero hay unas que están con código 010 y otras con 100
e.j
01/01/2004 010 entro
31/01/2004 100 salio
05/07/2004 010 entro
30/07/2004 100 salio
01/08/2004 010 entro
la consulta debe traer lo siguinte
entro salio
01/01/2004 31/01/2004
05/07/2004 30/07/2004
01/08/2004 null--
Tengo esta consulta, espero que por favor me ayudes lo más pronto posible te
lo agradecería bastante
select distinct(a.fun0),a.fe0,b.fe1 from
(select funcionario fun0,fecha_efectividad fe0 from rh_actos_administrativos,rh_funcionario where tipo_acto = 010 and personas_interno = funcionario) a,
(select funcionario fun1,fecha_efectividad fe1 from rh_actos_administrativos,rh_funcionario where tipo_acto = 100 and personas_interno = funcionario) b
where b.fun1 = a.fun0
and fe0 <= fe1
--and to_char(fe0,'yyyymmdd') <= 19920630
and a.fun0 = :P_interno
union
select funcionario fun0,fecha_efectividad fe0,null from rh_actos_administrativos,rh_funcionario where tipo_acto = 010 and personas_interno = funcionario
and funcionario = :p_interno
and fecha_efectividad not in (select a.fe0 from
(select funcionario fun0,fecha_efectividad fe0 from rh_actos_administrativos,rh_funcionario where tipo_acto = 010 and personas_interno = funcionario) a,
(select funcionario fun1,fecha_efectividad fe1 from rh_actos_administrativos,rh_funcionario where tipo_acto = 100 and personas_interno = funcionario) b
where b.fun1 = a.fun0
and fe0 <= fe1
-- and to_char(fe0,'yyyymmdd') <= 19920630
and a.fun0 = :P_interno)

1 Respuesta

Respuesta
1
Siento mucho el retraso, de verdad, pero ayer tuve problemas con el Oracle y me tocó desinstalarlo y volverlo a instalar. Intenté hacer las pruebas con el Access pero al final no se parecía en nada a lo que pretendíamos.
Bueno, al grano. Tengo una primera propuesta a ver si se acerca a lo que pides. Es la siguiente:
select a.fecha_efectividad, b.fecha_efectividad
from
(
select fecha_efectividad, tipo_acto, rownum fila
from rh_actos_Administrativos
where tipo_acto = '010'
order by fecha_efectividad
) a,
(
select fecha_efectividad, tipo_acto, rownum fila
from rh_actos_Administrativos
where tipo_acto = '100'
order by fecha_efectividad
)b
where a.fila = b.fila(+)
Hay que indicar que sólo es válido si la única fecha que no está en tabla es la de salida del último registro para un funcionario. Si no es así, (si puede faltar cualquier fecha), por favor indícamelo y vemos otra posible solución. Además, falta enlazarlo con la tabla que quieras para filtrarlo por funcionario.
Hasta pronto.
Hola Sha
Estoy muy impresionado por la solución que les ha dado a mi pregunta, eres increíble y si te digo que eres un man que sabes bastante, se nota, te lo agradezco, solo soy un chico y llevo pocos meses trabajando con oracle, y tengo como jefe a un mancito que le da a uno trabajos creyendo que uno ya tiene recorrido en el tema, y usted sabe oracle no es cualquier vaina, y sobretodo ese men cree que las cosas se hacen fácil y rapido, cuando le pedí una solución al problema salio con que hiciera un cursor y empezara a comparar las fechas y todo esa vaina, en cambio usted me salio con esto, claro que hubo algo que no salio bien pero ya lo arregle con una modificación que hice a tu query
Gracias por que aprendí algo que no había visto
Hasta Luego Sha.
A ver si te puedo ayudar. He estado analizando la consulta que incorporas en la pregunta, y me gustaría que me aclarases algún detalle. Entiendo que las personas las coges de la tabla rh_funcionario, y las fechas de rh_actos_administrativos. No me queda claro que campo corresponde a cada tabla para hacer la join entre ellas. También dudo sobre el tipo_acto, entiendo que está en la tabla de las fechas.
Siento no haber contestado en seguida, pero es que estos puntos nos lo tenía demasiado claros.
Hasta pronto.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas