Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Problemas con consulta left outer join (https://www.clubdelphi.com/foros/showthread.php?t=47738)

hebam 06-09-2007 00:19:50

Problemas con consulta left outer join
 
hola a todos, tengo un problema con una cobsulta a dos tablas de mi base de datos, tengo la siguiente consulta:

Código SQL [-]
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:


Código SQL [-]
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


La franja horaria es GMT +2. Ahora son las 22:09:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi