SQL - Union de tablas

 
Vista:

Union de tablas

Publicado por Javier Ferrero (4 intervenciones) el 07/01/2005 02:14:37
Hola a todos!!

Veo que recientemente ha habido un interesante debate sobre como comparar tablas. Yo también tengo una duda sobre como juntar distintas tablas y me gustaría que me ayudaseis a resolverla si es posible.Este es mi problema (problemon):

Pongamos que tengo las siguientes tablas con info de un determinado empleado:

Tabla 1:
AÑO , BONIFICACIONES EN EUROS
2000 , 400
2003 , 500

Tabla 2
AÑO , ¿PROMOCIONÓ?
2000 , Yes
2002, Yes

Tabla 3
AÑO, EMPLEADOS A SU CARGO
2001 , 5

Pues bien ,lo que yo quiero obtener seriá lo siguiente

Tabla 4
AÑO , BONIFICACIONES , ¿PROMOCIONÓ? , EMPLEADOS A SU CARGO
2000 , 400 , Yes , null
2001 , null , null , 5
2002 , null , Yes , null
2003 , 500 , null . null

El problema está en que en las tablas solo aparecen registros cuando el empleado recibe una bonificacion,promociona o tiene empleados a su cargo, pero no en caso contrario.Por eso al hacer los JOIN utilizando el campo AÑO , si para una de las tablas no existe un registro con ese año no obtengo nada,aunque si haya otros registros en las otras tablas para ese año.

¿Cómo puedo hacer?¿Alguna sugerencia?

Muchas gracias!! ;-)
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
sin imagen de perfil

RE:Union de tablas

Publicado por Liliana (426 intervenciones) el 07/01/2005 14:33:40
Hola Javier,
El tema es el JOIN, en los casos como el tuyo, la forma indicada es el FULL:

SELECT Empleado = COALESCE(T1.Empleado, T2.Empleado, T3.Empleado),
Año = COALESCE(T1.Año, T2.Año, T3.Año),
Bonificaciones = ISNULL(T1.Bonif,0),
Promociono = ISNULL(T2.Promociono, 'No'),
ACargo = ISNULL(T3.ACargo, 0)
FROM #Tabla1 T1
FULL JOIN #Tabla2 T2 ON T1.Empleado = T2.Empleado and T1.Año = T2.Año
FULL JOIN #Tabla3 T3 ON T1.Empleado = T3.Empleado and T1.Año = T3.Año
ORDER BY 1, 2

Saludos, Liliana.
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:Union de tablas

Publicado por Javier Ferrero (4 intervenciones) el 07/01/2005 15:56:17
Hola Liliana,

En primer lugar muchas gracias por responder y ademas tan rapido!!

Hay algo q se me olvido comentar y es que estoy utilizando Access 2003. Creo que esa es la razon por la que no me entiende las funciones COALESCE ni tampoco ISNULL. Tampoco puedo utilizar FULL JOIN,aunque ese aspecto creo que puedo solucionarlo uniendo LEFT y RIGHT JOIN.

Teneis alguna sugerencia de como puedo solucionarlo??

Thanks!!
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
sin imagen de perfil

RE:Union de tablas

Publicado por Li (426 intervenciones) el 07/01/2005 18:09:41
Hola Javier,
Yo nunca trabajé con Access, así que puede que lo que te sugiera sea una bestialidad, pero llevo un rato largo tratando lograr algo con el que tengo instalado, ni siquiera conozco la versión...

Generé una Tabla0 que solo tiene Empleado y Año, y con la consulta:

SELECT DISTINCTROW T0.Empleado, T0.Año, T1.Bonif, T2.Promociono, T3.ACargo
FROM ((T0 left JOIN T2 ON (T0.Año = T2.Año) AND (T0.Empleado = T2.Empleado)) left JOIN T3 ON (T0.Año = T3.Año) AND (T0.Empleado = T3.Empleado)) left JOIN T1 ON (T0.Año = T1.Año) AND (T0.Empleado = T1.Empleado);

Da el resultado que necesitás, pero repito, puede que lo mío haya sido una brutalidad, es que no encontré otra forma de reemplazar las PODEROSAS FUNCIONES de T-SQL
Espero que te sirva al menos para orientarte.
Liliana.
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:Union de tablas

Publicado por Javier Ferrero (4 intervenciones) el 07/01/2005 23:17:33
Hola de nuevo!!

He probado esto último y me ha funcionado a la perfeccion.

Muchas gracias Liliana por toda tu ayuda.Asi da gusto!

Un saludo a todos y hasta pronto
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