PDA

Ver la Versión Completa : Problemas con consulta left outer join


hebam
06-09-2007, 00:19:50
hola a todos, tengo un problema con una cobsulta a dos tablas de mi base de datos, tengo la siguiente consulta:


SELECT COUNT(*) AS total, AVG(telefonico.total) AS media, sucursal.sucursal, sucursal.nombre
FROM telefonico INNER JOIN
sucursal ON telefonico.sucursal = sucursal.nombre
WHERE (telefonico.region = '1') AND (telefonico.fcaptura BETWEEN CONVERT(DATETIME, '2007-08-01 00:00:00', 102) AND CONVERT(DATETIME,
'2007-08-31 00:00:00', 102))
GROUP BY telefonico.sucursal, sucursal.sucursal, sucursal.nombre
ORDER BY sucursal.sucursal


esta consulta me saca el promedio y la cantidad de registros de la tabla telefonico, la tabla sucursal la utilizo para poder sacar el numero de sucursal y ordernarlo por el el numero de la sucursal (sucursal.sucursal) el prblema es que en region 1 tengo 87 sucursales, y en telefonico (evalua sucursales) unicamente tengo capturadas 55 sucursales, al hacer la consulta unicamente me muestra la 55 sucursales evaluadas en telefonico,lo quiero que me aparezcan las 87 sucursales aunque no esten evaluadas, y lo intente con RIGHT OUTER JOIN y LEFT OUTER JOIN o FULL OUTER JOIN y no me los muestra, espero que me puedan ayudar.

ContraVeneno
06-09-2007, 00:35:05
Pues va a estar medio difícil, porque en la cláusula "Where" comparas campos de la tabla "telefónico" y el problema es que si utilizas "right outer join" (que es como se solucionaría tu problema) los campos de la tabla "teléfonico" serían nulos. Tendrías que modificar la cláusula "where" para incluir los nulos.

hebam
06-09-2007, 00:44:06
ya intente lo que me dices le di un group by ademas de intentarlo con un right outer join y sigue sina arrojarme los resultados que quiero hay sucursales que no se evaluaron entonces no importa que sean nulos los resultados, la idea eque me aparescan las sucursales evaluadas y no evaluadas, o tienes alguna idea de como lo puedo hacer.

gracias

ContraVeneno
06-09-2007, 00:52:55
Por eso mismo... si las sucursales no se evaluaron, todos los campos de "telefónico" serían nulos, pero como en la cláusula "where" estas evaluando que "telefonico.region = 1" pues no te muestra los nulos, por lo tanto, no te muestra los que no se evaluaron. Tienes que utilizar un "rigth outer join" y modificar la cláusula "where" para que también considere los nulos.

pcicom
06-09-2007, 03:43:27
Prueba Lo Siguiente:



SELECT telefonico.sucursal,sucursal.nombre,COUNT(*) AS total, AVG(telefonico.total) AS media
FROM telefonico
INNER JOIN sucursal ON telefonico.sucursal = sucursal.nombre
WHERE (telefonico.region = '1') AND (telefonico.fcaptura BETWEEN CONVERT(DATETIME, '2007-08-01 00:00:00', 102) AND CONVERT(DATETIME,
'2007-08-31 00:00:00', 102))
ORDER BY 1,2