SQL - consulta sql

   
Vista:

consulta sql

Publicado por aldo (2 intervenciones) el 16/03/2010 18:56:47
Hola,

tengo las siguientes tablas... TRAMITES y RESOLU

TRAMITES(nroexp, nivexp, fecexp, tipo, etc...)
RESOLU(nroexp,nivexp, importe, etc...)

un nro. de expediente puede tener mas de una resolucion en la tabla RESOLU.
Quiero obtener un listado de todos los tramites filtrando por fecha y que me traiga tambien el importe total de la tabla RESOLU de cada expediente.

No parece dificil, pero el tema es que existen tramites que no tienen cargada ninguan resolucion (eso es factible).
Y otro tema importante es que estoy trabajando con el SQL de Foxpro 2.6 (son dbf) y no puedo hacer INNER JOIN, ni OUTER JOIN.

la consulta que creo yo es...

SELECT T.TIPO, T.NROEXP, T.NIVEXP, T.APENOM, T.FECEXP, SUM(R.IMPORTE) FROM TRAMITES T, RESOLU R WHERE T.NROEXP=T.NROEXP AND T.NIVEXP=R.NIVEXP AND FECEXP>=CTOD('01/03/2010') AND FECEXP<=CTOD('16/03/2010')

Esto me trae solo aquellos tramites que en la TABLA RESOLU tienen datos cargados, y esta bien que asi sea.
Pero quiero obtener estos mismos datos mas aquellos tramites que no tienen datos cargados en la tabla RESOLU.

El INNER JOIN y OUTER JOIN no lo reconoce el SQL de Fox.

Alguien me puede ayudar?

gracias
Aldo
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:consulta sql

Publicado por Leonardo Josue (878 intervenciones) el 16/03/2010 22:51:41
Buenas tardes Aldo:

La verdad no estoy muy familiarizadon con FOXPRO, pero creo que podrías "simular" un LEFT JOIN utilizando la clausula UNION.

Según entendí la consulta que colocaste en el foro te regresa correctamente la información de todos los trámites que tienen resolución, por lo tanto sólo faltaría incluir aquellos trámites que no tienen resolución, creo que entonces tendrías que hacer algo como esto:

SELECT T.TIPO, T.NROEXP, T.NIVEXP, T.APENOM, T.FECEXP, SUM(R.IMPORTE) FROM TRAMITES T, RESOLU R WHERE T.NROEXP=T.NROEXP AND T.NIVEXP=R.NIVEXP AND FECEXP>=CTOD('01/03/2010') AND FECEXP<=CTOD('16/03/2010')
UNION
SELECT T.TIPO, T.NROEXP, T.NIVEXP, T.APENOM, T.FECEXP, 0 FROM TRAMITES T WHERE T.NROEXP NOT IN
(
SELECT NROEXP FROM RESOLU
) AND
FECEXP>=CTOD('01/03/2010') AND
FECEXP<=CTOD('16/03/2010')

Cómo podrás notar en lugar de hacer una sumatoria sobre la tabla RESOLU coloco un 0 para tener el mismo número de columnas en ambas consultas y poder hacer la unión.

Saludos y espero que te pueda servir la ayuda.
Leo
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:consulta sql

Publicado por aldo (2 intervenciones) el 17/03/2010 18:53:34
Leo, muchisimas gracias!!
anduvo tu ejemplo.

gracias por tu tiempo, en serio!

saludos,
Aldo
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