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 04-08-2010
Jose Roman Jose Roman is offline
Miembro
 
Registrado: jul 2006
Ubicación: Colombia
Posts: 361
Poder: 18
Jose Roman Va por buen camino
Question Ayuda con consulta.

Trabajo con Firebird 2.1, en particular la consulta se hace con dos tablas:
1. RELTECPAS, con dos campos, TECNICO que es un codigo de dos digitos con el que se identifica y PASO que es el tipo de trabajo que el realiza y es de dos digitos, el TECNICO puede realizar varios tipos de trabajos.
2. GARANTIAS, con cuatro campos TECNICO, PASO,UNDS que significa cuantas unidades hace del trabajo y FECHA en que se ingreso el trabajo.

Bueno necesito saber cuantas UNDS ha hecho un TECNICO dado un PASO y una FECHA, si el TECNICO no ha hecho ningun trabajo aun en UNDS de cero.
Estando la tabla GARANTIAS vacia no me da lo que deseo, si ingreso un registro me muestra solo el registro y necesito que me muestre los demas registro para mi programa ya que se le asignara a quien tenga menos unidades y si hay tecnicos con el mismo numero de unidades se le asignara en roden del codigo, mi consulta es la siguiente:
Código SQL [-]
select a.TECNICO,coalesce(sum(b.UNDS),0)
from RELTECPAS a
left join GARANTIAS b on a.TECNICO = b.TECNI
where a.PASO = '04' and b.PASO = a.PASO and b.FASIG >= '19.07.2010'
group by a.TECNICO
Que tendre malo??
Gracias de antemano.
Responder Con Cita
  #2  
Antiguo 04-08-2010
Avatar de afunez2007
afunez2007 afunez2007 is offline
Miembro
 
Registrado: oct 2007
Ubicación: La Ceiba, Honduras
Posts: 170
Poder: 17
afunez2007 Va por buen camino
Lightbulb

Pero cual es el error que te sale al ejecutar la SQL, eso podria dar pistas de como resolver la situacion!

Saludos
__________________
Si robas, roba un beso, si mientes que sea por amor y si engañas que sea a la muerte!!
Responder Con Cita
  #3  
Antiguo 04-08-2010
Jose Roman Jose Roman is offline
Miembro
 
Registrado: jul 2006
Ubicación: Colombia
Posts: 361
Poder: 18
Jose Roman Va por buen camino
Que pena, no da error, pero necesito que me muestre tambien los otros tecnico que no tengan unidades con valor cero, asi ordenare la consulta teniendo en cuenta las unidades y el tecnico.
Responder Con Cita
  #4  
Antiguo 05-08-2010
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
en lugar de un "left join" necesitas un "left outer join" y vas a requerir de la funcion COALESCE para poner ceros a los nulos.
__________________

Responder Con Cita
  #5  
Antiguo 05-08-2010
Jose Roman Jose Roman is offline
Miembro
 
Registrado: jul 2006
Ubicación: Colombia
Posts: 361
Poder: 18
Jose Roman Va por buen camino
Gracias por responder....

Bueno te cuento que realice lo sugerido pero no dio, en la tabla GARANTIAS ingrese un registro, la tabla TECNICOS tiene 35 resgitros, he realizado lo que me indicaron y no da, quizas no comprendan uds. lo que necesito, necesito que sume las unidades que tienen los tecnicos en la tabla GARANTIAS dado un PASO y una FECHA, si no posee unidades me muestre de todos modos el codigo del tecnico pero con valor cero en la suma de unidades, pero esto no es asi, me muestra solo el registro y no muestra a los demas tecnicos.
Mi consulta SQL es la siguiente:
Código SQL [-]
select a.TECNICO,coalesce(sum(b.UNDS),0)
from RELTECPAS a
right outer join GARANTIAS b on a.TECNICO = b.TECNI
where a.PASO = '04' and b.PASO = a.PASO and b.FASIG >= '19.07.2010'
group by a.TECNICO
Responder Con Cita
  #6  
Antiguo 05-08-2010
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
El primer detalle que veo, es que tienes en la cláusula "where", detalles que involucran a la tabla de garantías. Lo que sucede en ese caso es que al hacer el "join" te envía los datos que encuentra, pero despúes de eso, filtra lo que concuerde con "b.tecnico = a.tecnico", eliminando así todos los que no concuerden con esa cláusula y por eso solo te trae un registro. Es mejor que muevas del where todo lo que involucre a la tabla garantías, a la parte del join.
Código SQL [-]
select a.TECNICO,coalesce(sum(b.UNDS),0)
from RELTECPAS a
left outer join GARANTIAS b on a.TECNICO = b.TECNI and a.PASO = b.PASO and b.FASIG >= '19.07.2010'
where a.PASO = '04'
group by a.TECNICO

¿eso no funciona?
__________________


Última edición por ContraVeneno fecha: 05-08-2010 a las 16:38:35.
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 una consulta plz ! K4RL0S SQL 9 17-11-2005 17:33:09
Ayuda con una consulta SQL agova SQL 13 29-08-2005 17:06:15
Ayuda con consulta raco Varios 4 08-04-2005 21:56:43
Ayuda con consulta SQL tgsistemas SQL 9 18-02-2004 16:14:07
Ayuda con Consulta mosorio SQL 3 23-07-2003 08:28:58


La franja horaria es GMT +2. Ahora son las 15:57:05.


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