Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Problema consulta 3 tablas con más tablas incluídas!!!...

Estas en el tema de Problema consulta 3 tablas con más tablas incluídas!!!... en el foro de SQL Server en Foros del Web. Buen día a todos!!! Pues verán tengo un problemota con una consulta: Primero intenté unir 3 tablas y si me funciona: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: ...
  #1 (permalink)  
Antiguo 01/11/2011, 14:54
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 8 años, 4 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...
  #2 (permalink)  
Antiguo 01/11/2011, 16:19
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 8 años, 4 meses
Puntos: 1
Respuesta: Problema consulta 3 tablas con más tablas incluídas!!!...

Ok, yo había pensado en agrupar todos lo campos por mi campo, que es como el número de control de un trabajador, es decir, un campo que se llama b_traba1.rpe, según yo así podría resolverlo, pero el problema es que no se como funcione la sintaxis en sql exactamente, eh revisado algunos ejemplos y veo que en ellos si pueden agrupar solo por un campo en específico aún teniendo varios declarados dentro del SELECT, en mysql yo también podía hacer esto, pero no se por que al realizar mis consultas de sql en asp.net no me deja agrupar solo un campo si no que me pide los demás, es por una de esas razones que siento que mi consulta no funciona al 100... Existe alguna manera de agrupar los elementos de mi tabla resultante solo por un campo en específico??...
  #3 (permalink)  
Antiguo 02/11/2011, 16:17
 
Fecha de Ingreso: noviembre-2011
Mensajes: 6
Antigüedad: 8 años, 2 meses
Puntos: 0
Respuesta: Problema consulta 3 tablas con más tablas incluídas!!!...

utiliza JOIN

Etiquetas: multitabla, sql, tablascruzadas, vs2010
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:58.