Ver Mensaje Individual
  #2 (permalink)  
Antiguo 28/10/2011, 11:49
Avatar de stuart_david3
stuart_david3
 
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Unión de 3 tablas, consulta rara :p...

Ok lo intenté de esta manera sin incluir el campo "puesto" y funcionó bien la consulta:

Código SQL:
Ver original
  1. 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

Ahora al incluir este campo y mezclar 3 tablas me repite varios registros ...

Código SQL:
Ver original
  1. SELECT TOP 10 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, c_puesto.puesto, 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_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, c_puesto.puesto, fe

Selecciono los 10 primeros por que si pongo todos me marca un valor del timeout caducado ya que esta consulta la estoy ejecutando desde una página en asp.net...

No se que onda, si haciendo la consulta de las tres tablas independientes si me funciona ...