Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-11-2012
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Select a 2 tablas

Hola amigos.
Tengo el siguiente problema, en una tabla tengo registros de todas las llamadas recibidas (A) y en otra tabla tengo los registros de las llamadas que fueron atendidas por alguna persona (B). Esto es que muchas llamadas no fueron atendidas por alguien porque estaban todos ocupados.
Lo que tengo que hacer es armar una consulta que me traiga todas las llamadas (A) y los datos de quines la atendieron de (B) que como dije muchas de (A) no tienen un registro en (B). Hay un campo que es comun en ambas tablas (CallReference)y es univoco y seria este el que las relaciona. Actualmente lo que hago es extraer de (A) los registros del rango de fechas que solicita el cliente y una vez obtenido, hago el open y lo recorro de a un registro buscando el CallReference de (A) en (B), si lo encuentra tomo los datros y sino quedan en blanco. Se puede hacer todo esto con un solo Select? porque me tarda mucho tiempo.
Gracias.
Responder Con Cita
  #2  
Antiguo 12-11-2012
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 915
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Bueno al parecer tu debilidad es el lenguaje SQL...


Código SQL [-]
SELECT Llamadas.*, Atendieron.*
FROM Llamadas
LEFT OUTER JOIN Atendieron  ON (Llamadas. CallReference = Atendieron. CallReference);

Cita:
Llamadas.* te traera todos los campos de la tabla llamadas al igual que Atendieron.*, es preferible que indiques los campos que requieres
Saludos...
Responder Con Cita
  #3  
Antiguo 12-11-2012
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Gracias CLOAYZA, y si tienes razon, me falta mucho con SQL.
Un abrazo.
Responder Con Cita
  #4  
Antiguo 12-11-2012
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
UUUUPPPS!!!!!
Arme esta consulta pero no me respeta lo que hay en la clausula where:

Código SQL [-]
SELECT a.logdate, a.logtime, a.node, a.channel, a.phone, a.lengthcall, a.calltype, a.campaign, a.taxid,
b.posnumber, b.agentid, b.skill
FROM LOGCALL a LEFT OUTER JOIN logpos b on (a.callrefid = b.callrefid)
where a.logdate = '20120702'
and (a.CALLTYPE = 'I')
OR ((a.CALLTYPE = 'O') AND (a.RESULT IN ('10','18','1004'))
AND (a.PHONE <> ''))
Responder Con Cita
  #5  
Antiguo 12-11-2012
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Puede que hayas agrupado mal las comparaciones en los parentesis y por eso no te de el resultado deseado.

Según lo que has puesto si elimino los parentesis que encierran una única comparación me queda algo así:

Código SQL [-]
a.CALLTYPE = 'I' OR (a.CALLTYPE = 'O' AND a.RESULT IN ('10','18','1004') AND a.PHONE <> '')

entonces te mostraría todas las llamadas de tipo "I" o todas las llamadas de tipo "O" cuyo resultado esté en 10,18 y 1004 y el teléfono no esté vacio, tienen que cumplirse las tres condiciones. ¿es eso lo que realmente quieres?, si es así no le veo nada raro.

Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
Responder Con Cita
  #6  
Antiguo 12-11-2012
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Gracias amigos por responder.
La macana la cometi yo, me falto agregar un parentesis que agrupe todo exceptuando la fecha.
Quedaria asi:
Código SQL [-]
SELECT a.logdate, a.logtime, a.node, a.channel, a.phone, a.lengthcall, a.calltype, a.campaign, a.taxid, b.posnumber, b.agentid, b.skill FROM LOGCALL a LEFT OUTER JOIN logpos b on (a.callrefid = b.callrefid) where a.logdate = '20120702' and ((a.CALLTYPE = 'I') OR ((a.CALLTYPE = 'O') AND (a.RESULT IN ('10','18','1004')) AND (a.PHONE <> '')))

Asi funciona en forma correcta.
Mil gracias.
Responder Con Cita
  #7  
Antiguo 12-11-2012
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Otra vez con problemas.
Ahora me encuentro con esta otra condicion que no se como resolver.
Es sobre el mismo query:

Código SQL [-]
SELECT a.callrefid,  a.callrefid1, a.logdate, a.logtime, a.node, a.channel, a.phone, a.lengthcall, a.calltype, a.campaign, a.taxid,
b.posnumber, b.agentid, b.skill
FROM LOGCALL a LEFT OUTER JOIN logpos b on (a.callrefid = b.callrefid)
where a.logdate between '20120701' and '20120707'
and ((a.CALLTYPE = 'I') OR ((a.CALLTYPE = 'O') AND (a.RESULT IN ('10','18','1004')) AND (a.PHONE <> '')))

En el on (a.callrefid = b.callrefid) es donde tengo el problema.
Si a.callrefid1 <> ' ' and a.callrefid1 <> '*' then
on (a.callrefid1 = b.callrefid)
else
on (a.callrefid = b.callrefid)

Tengo que poder poner esa condicion.
Es posible?
Responder Con Cita
  #8  
Antiguo 13-11-2012
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
No entiendo que quieres conseguir,

si lo que quieres es eliminar los registros de a donde no estén vacios o sean un * añade esas condiciones al WHERE.

Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
Responder Con Cita
  #9  
Antiguo 13-11-2012
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Hay dos campos callrefid y callrefid1.
callrefid1 generalmente viene en blanco o con un '*', si no es asi quiere decir que hay que tomar ese dato para la condicion del ON

En el on (a.callrefid = b.callrefid) es donde tengo el problema.
Si a.callrefid1 <> ' ' and a.callrefid1 <> '*' then
on (a.callrefid1 = b.callrefid) -- uso callrefid1
else
on (a.callrefid = b.callrefid) -- uso callrefid
Responder Con Cita
  #10  
Antiguo 13-11-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Cita:
Empezado por jars Ver Mensaje
Hay dos campos callrefid y callrefid1.
callrefid1 generalmente viene en blanco o con un '*', si no es asi quiere decir que hay que tomar ese dato para la condicion del ON

En el on (a.callrefid = b.callrefid) es donde tengo el problema.
Si a.callrefid1 <> ' ' and a.callrefid1 <> '*' then
on (a.callrefid1 = b.callrefid) -- uso callrefid1
else
on (a.callrefid = b.callrefid) -- uso callrefid
Si lo que quieres es enlazar a.callrefid y a.callrefid1 con b.callrefid lo que tienes que hacer es poner otro
Código SQL [-]
    LEFT JOIN LogPos C
      ON C.callrefid1 = B.callrefid
Un saludo

P.D.: Muestra tú SQL más elegante en el futuro, no realices la SQL en una sola línea, si pones los nombre en minúscula pues todos en minúscula tanto en el SELECT como en el WHERE, es incomodo a la hora de leerla.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #11  
Antiguo 13-11-2012
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Gracias OLBEUP por el aporte y los concejos.
Abrazo
Responder Con Cita
  #12  
Antiguo 13-11-2012
jars jars is offline
Miembro
 
Registrado: mar 2004
Posts: 279
Poder: 21
jars Va por buen camino
Lamentablemente no me esta funcionando.
Aclaro que LOGPOS no tiene un campo CALLREFID1 solo CALLREFID
Lo puse asi, no se si esta correcto:

Código SQL [-]
SELECT A.CALLREFID, A.CALLREFID1, A.LOGDATE, A.LOGTIME, A.PHONE, A.LENGTHCALL,
B.POSNUMBER, B.AGENTID, B.SKILL 
FROM LOGCALL A 
LEFT OUTER JOIN LOGPOS B ON (A.CALLREFID = B.CALLREFID) 
LEFT JOIN LOGPOS C ON (A.CALLREFID1 = C.CALLREFID) 
WHERE A.LOGDATE BETWEEN '20120701' AND '20120707' 
AND ((A.CALLTYPE = 'I') OR ((A.CALLTYPE = 'O') 
AND (A.RESULT IN ('10','18','1004')) AND (A.PHONE <> '')))

No me da error pero me trae montones de registros repetidos.

Última edición por jars fecha: 13-11-2012 a las 17:53:01.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda con select en dos tablas n03l Firebird e Interbase 4 01-09-2012 20:06:47
Hacer un select a 2 tablas de 2 gdb´s. AMINOA2R Firebird e Interbase 6 25-01-2008 15:45:43
Select con dos tablas enecumene MySQL 2 22-02-2007 20:13:22
Select en varias tablas sitrico Firebird e Interbase 2 29-12-2006 00:09:57
5 select de 5 tablas diferentes en un select solo sakuragi SQL 6 15-06-2005 18:57:06


La franja horaria es GMT +2. Ahora son las 05:56:44.


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
Copyright 1996-2007 Club Delphi