Unir resultado de 2 sentencias SQL de tablas distis

Para debatir interrogar o exponer cualquier duda o sugerencia sobre el curso SQL desde cero.

Unir resultado de 2 sentencias SQL de tablas distis

Notapor mgarcia » Mar May 28, 2013 12:13 am

Necesito unir los resultados de 2 sentencias SQL de dos tablas con contenidos (columnas) distintas, de la siguiente forma:

SELECT SOCIEDAD, NOMINA, NUMERO_NOMINA, CANTIDAD, T_DEBE, T_HABER
FROM demasa.Base_Polconta_Resumen
where SOCIEDAD = 2100 and NOMINA = 'ME' and NUMERO_NOMINA = 31

SELECT SOCIEDAD, NOMINA, NUMERO_NOMINA, CT, CUENTA_CONTABLE, CAMPO3, CENTRO_COSTO, IMPORTE, DEBITOS, CREDITOS
FROM demasa.Base_Polconta_AD
where SOCIEDAD = 2100 and NOMINA = 'ME' and NUMERO_NOMINA = 31

Ambas consultas dan resultados distintos y no tienen el mismo número de columnas, ni son relacionadas.

Como puedo Unirlas (los registros de una y luego los registros de la otra)?

Gracias.
mgarcia
 
Mensajes: 1
Registrado: Mar May 28, 2013 12:05 am

Re: Unir resultado de 2 sentencias SQL de tablas distis

Notapor Pere » Mar May 28, 2013 9:05 pm

Bueno, al unir dos o mas consultas, todas ellas deben tener el mismo número de columnas, y esto es algo que no podemos transgredir, por lo que a tu problema solo se me ocurren dos posibles soluciones, o quitas columnas a una de ellas, o le pones a la otra. Puedes incluir constantes e incluso valores nulos para lograr tu propósito. Por ejemplo:

Supongamos que tenemos dos tablas parecidas pero con diferente numero de columnas que queremos unir. En una tenemos artículos normales (ARTICULOS) y en otras tenemos artículos en packs de N unidades (PACKS), done las unidades de cada pack está informado en un campo que la primera tabla no tiene, realicemos la unión de la siguiente manera:

Código: Seleccionar todo

select ID_ARTICULO as ID
, NOMBRE_ARTICULO as NOMBRE, 1 as UNIDADES
  from ARTICULOS
 union all
select ID_PACK
, NOMBRE_PACK, UNIDADES
  from PACKS


En la consulta anterior, a la select donde figura la tabla que nos falta una columna le añadimos una constante para aparejar el número de columnas de las dos consultas que forman la consulta principal, pero podemos hacerlo incluso con un valor nulo:

Código: Seleccionar todo

select ID_ARTICULO as ID
, NOMBRE_ARTICULO as NOMBRE, NULL as UNIDADES
  from ARTICULOS
 union all
select ID_PACK
, NOMBRE_PACK, UNIDADES
  from PACKS


Es posible que esta última opción de problemas por una cuestión de tipos de datos, de modo que deberemos especificar de que tipo es la columna donde forzamos un nulo como constante, por ejemplo en Oracle lo haríamos así:

Código: Seleccionar todo

select ID_ARTICULO as ID
, NOMBRE_ARTICULO as NOMBRE, to_number(NULL) as UNIDADES
  from ARTICULOS
 union all
select ID_PACK
, NOMBRE_PACK, UNIDADES
  from PACKS


De este modo le estamos diciendo que la columna es de tipo numérico.

Espero te sirva, saludos.
Pere
 
Mensajes: 74
Registrado: Mar Feb 02, 2010 9:44 pm


Volver a Soporte SQL desde cero

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 30 invitados

cron