PDA

Ver la Versión Completa : Resultado de dos consultas en un Grid


amerika111
17-04-2012, 01:52:11
hola buenas tardes:
quisiera saber si hay manera de colocar el resultado de dos consultas en un solo grid, o si hay forma de realizar una consulta una dos tablas.


select * from HIST_MOVS movs where movs.id_ent=1 and movs.id_cta=1 order by ult_act asc
select * from SUPLEMENTOS supl where supl.id_ent=1 and supl.id_cta=1 order by ult_act asc


las tablas casi tienen los mismos campos excepto que la tabla suplementos trae un campo extra llamado rango.

roman
17-04-2012, 02:09:13
Si la dos tablas tuvieran los mismos campos podrías usar una unión


select * from HIST_MOVS movs where movs.id_ent=1 and movs.id_cta=1

union

select * from SUPLEMENTOS supl where supl.id_ent=1 and supl.id_cta=1

order by ult_act as /* el order by aplicaría a ambas tablas */


Ahora bien, si sólo es un campo puedes "suplirlo" en la otra tabla:


select *, "no asignado" rango from HIST_MOVS movs where movs.id_ent=1 and movs.id_cta=1

union

select * from SUPLEMENTOS supl where supl.id_ent=1 and supl.id_cta=1

order by ult_act as /* el order by aplicaría a ambas tablas */


suponiendo, claro, que es un campo CHAR y que la tabla suplemntos lo tiene al final. En otro caso, tendrías que suplir el valor por defecto que corresponda al tipo de datos del campo en la tabla suplementos. Y si el campo está en otra posición tendrás que listar todos los campos de cada tabala e intercalar en la primera tabla el campo faltante.

// Saludos

amerika111
17-04-2012, 02:22:16
ok gracias si utilice un union all y segui tu consejo de suplir los campos de la otra tabla..

ahora nose como realizarle aqui..

tengo ya el resultado pero un campo aparece con numeros como estos
73
60
45

y estos estan relacionados en otra tabla donde cada numero tiene su descripcion ahora bien como le podria hacer para que en lugar que apareciera el numero apareciese la descripcion. podria usar el inner join con la otra tabla utilizando la que resulto del union all

roman
17-04-2012, 02:26:03
Mmm. No estoy seguro, pero creo que deberías hacer el join en cada tabla:


select ...
from ...
inner join ...

union

select ...
from ...
inner join ...


// Saludos

amerika111
17-04-2012, 03:23:06
mmm lo hice afuera pero nose si sea lo optimo o la forma correcta


SELECT movs.id,movs.id,movs.id_per,per.clave,movs.id_ent,movs.id_cta,movs.motivo,movs.tipoMovs,movs.montoIn icial,movs.montoFinal,movs.usr,movs.ult_act FROM FMPR_PER per
INNER JOIN
(SELECT id,id_lib,id_per,id_ent,id_cta,'' AS motivo,tipoMovs,montoInicial,montoFinal,usr,ult_act
FROM FMPR_HIST_MOVS movs WHERE movs.id_ent=1 and movs.id_cta=1
union all
SELECT id,id_lib,id_per,id_ent,id_cta,motivo,tipoMovs,monto as montoInicial,'' AS montoF,usr,ult_act
FROM FMPR_SUPLEMENTOS supl where supl.id_ent=1 and supl.id_cta=1) as Movs
ON per.id=movs.id_per and per.clave='ene2011'