Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/11/2011, 13:54
Avatar de stuart_david3
stuart_david3
 
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 12 años, 7 meses
Puntos: 1
Pregunta Problema consulta 3 tablas con más tablas incluídas!!!...

Buen día a todos!!! Pues verán tengo un problemota con una consulta:

Primero intenté unir 3 tablas y si me funciona:

Código SQL:
Ver original
  1. SELECT b_traba1.rpe, c_puesto.cl_puest, c_puesto.puesto FROM b_kardex2, b_traba1, c_puesto WHERE b_traba1.rpe=b_kardex2.rpe AND c_puesto.cl_puest=b_kardex2.cl_puest GROUP BY b_traba1.rpe, c_puesto.cl_puest, c_puesto.puesto

Al unir la consulta anterior con esta (que también me funciona):

SELECT c_zonas.nombre, c_a_resp.dscarea, b_traba1.rpe, b_traba1.nombre, b_traba1.fe_antre, b_traba1.fe_ingre, b_traba3.fe_natra, b_kardex2.im_saldi, CONVERT (INT,(DATEDIFF (dd, b_traba3.fe_natra, GETDATE()) - DATEDIFF (yy, b_traba3.fe_natra, GETDATE()) / 4.25) / 365) AS Edad, b_traba1.sexotrab, c_ubica.ubicapza, b_traba1.cl_nides, b_traba1.if_nire2, fe, CASE WHEN fe<GETDATE() THEN GETDATE() ELSE null END AS fepos, CONVERT (INT,(DATEDIFF (dd, GETDATE(), fe) - DATEDIFF (yy, GETDATE(), fe) / 4.25) / 365) AS anyjub FROM (SELECT fe_antre, CASE WHEN b_traba1.sexotrab='M' THEN DATEADD(yy, 30, b_traba1.fe_antre) ELSE DATEADD(yy, 25, b_traba1.fe_antre) END AS fe FROM b_traba1) AS t1, b_traba1, b_traba3, c_zonas, c_a_resp, b_kardex2, c_ubica, c_puesto WHERE (DATEDIFF(yy, b_traba1.fe_antre, GETDATE()) > 25) AND (DATEDIFF(yy, b_traba3.fe_natra, GETDATE()) > 55) AND c_zonas.descr=b_traba1.cl_zona AND c_a_resp.area=b_traba1.area AND b_traba1.rpe=b_traba3.rpe AND b_traba1.fe_antre=t1.fe_antre AND b_traba1.rpe=b_kardex2.rpe AND b_traba1.cl_ubica=c_ubica.cl_ubica GROUP BY c_zonas.nombre, c_a_resp.dscarea, b_traba1.rpe, b_traba1.nombre, b_traba1.fe_antre, b_traba1.fe_ingre, b_traba3.fe_natra, b_kardex2.im_saldi, b_traba1.sexotrab, c_ubica.ubicapza, b_traba1.cl_nides, b_traba1.if_nire2, fe

Esta es mi consulta ya uniendo las dos pero que me repite los registros que segun yo deberían de agruparse lo límite a 50 por que me genera error del timeout al querer mostrar todos...

Código SQL:
Ver original
  1. SELECT TOP 50 c_zonas.nombre, c_puesto.cl_puest, c_a_resp.dscarea, b_traba1.rpe, b_traba1.nombre, b_traba1.fe_antre, b_traba1.fe_ingre, b_traba3.fe_natra, b_kardex2.im_saldi, CONVERT (INT,(DATEDIFF (dd, b_traba3.fe_natra, GETDATE()) - DATEDIFF (yy, b_traba3.fe_natra, GETDATE()) / 4.25) / 365) AS Edad, b_traba1.sexotrab, c_ubica.ubicapza, b_traba1.cl_nides, b_traba1.if_nire2, fe, CASE WHEN fe<GETDATE() THEN GETDATE() ELSE NULL END AS fepos, CONVERT (INT,(DATEDIFF (dd, GETDATE(), fe) - DATEDIFF (yy, GETDATE(), fe) / 4.25) / 365) AS anyjub FROM (SELECT fe_antre, CASE WHEN b_traba1.sexotrab='M' THEN DATEADD(yy, 30, b_traba1.fe_antre) ELSE DATEADD(yy, 25, b_traba1.fe_antre) END AS fe FROM b_traba1) AS t1, b_traba1, b_traba3, c_zonas, c_a_resp, b_kardex2, c_ubica, c_puesto WHERE (DATEDIFF(yy, b_traba1.fe_antre, GETDATE()) > 25) AND (DATEDIFF(yy, b_traba3.fe_natra, GETDATE()) > 55) AND c_zonas.descr=b_traba1.cl_zona AND c_a_resp.area=b_traba1.area AND b_traba1.rpe=b_traba3.rpe AND b_traba1.fe_antre=t1.fe_antre AND b_traba1.rpe=b_kardex2.rpe AND c_puesto.cl_puest=b_kardex2.cl_puest AND b_traba1.cl_ubica=c_ubica.cl_ubica GROUP BY c_zonas.nombre, c_puesto.cl_puest, c_a_resp.dscarea, b_traba1.rpe, b_kardex2.rpe, b_traba1.nombre, b_traba1.fe_antre, b_traba1.fe_ingre, b_traba3.fe_natra, b_kardex2.im_saldi, b_traba1.sexotrab, c_ubica.ubicapza, b_traba1.cl_nides, b_traba1.if_nire2, fe

Me manda varios registros repetidos. En la tabla original de "b_kardex2" que es una de las que estoy uniendo se me repiten algunos registros y son los que se me muestran como resultados de mi consulta, pero según yo con el "group by" se agrupan (como en la primera consulta que puse y si los agrupaba) y ahora no se que puedo hacer, disculpen las molestias, y agradezco sus respuestas...