Código SQL:
Ver original
SELECT A.rpe, C.cl_puest, C.puesto FROM b_kardex2 AS BK INNER JOIN b_traba1 AS A ON BK.rpe=A.rpe INNER JOIN c_puesto AS C ON BK.cl_puest=C.cl_puest GROUP BY A.rpe, C.cl_puest, C.puesto
La misma que intento implementar en otra consulta es esta:
Código SQL:
Ver original
b_kardex2 AS BK INNER JOIN b_traba1 AS A ON BK.rpe=A.rpe INNER JOIN c_puesto AS C ON BK.cl_puest=C.cl_puest
El problema ocurre cuando la implemento en una consulta mucho más grande en la cual selecciono algunos campos de una tabla que se llama: b_traba1 (rpe, nombre, fe_ingre, fe_antre, sexo_trab, cl_nides, if_nire2) y algunos campos de otras tablas relacionandolas con la tabla b_traba1, (tabla b_traba3 para el campo "fe_natra", b_kardex2 para "im_saldi", c_zonas para "nombre" y c_ubica para "ubicapza") y de la cual voy determinando mediante la misma consulta el numero de años que el trabajador tiene en la empresa, así solo muestro a los trabajadores hombres con más de 25 años en la empresa y más de 55 años de edad.
Código SQL:
Ver original
WHERE (DATEDIFF(yy, b_traba1.fe_antre, GETDATE()) > 25) AND (DATEDIFF(yy, b_traba3.fe_natra, GETDATE()) > 55)
También determino los años que han transcurrido desde que el trabajador se pudo haber jubilado en el campo "anyjub", dependiendo si es hombre deben ser 30 años y si es mujer 25 así como la fecha en la que debió haberse jubilado "fe":
Código SQL:
Ver original
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 INNER JOIN b_traba1 AS b3 ON t1.fe_antre=b3.fe_antre
La fecha en la que se podrá jubilar "fepos" (que sería la fecha actual si su fecha ya paso):
Código SQL:
Ver original
CASE WHEN fe<GETDATE() THEN GETDATE() ELSE NULL END AS fepos
Su edad:
Código SQL:
Ver original
CONVERT (INT,(DATEDIFF (dd, b_traba3.fe_natra, GETDATE()) - DATEDIFF (yy, b_traba3.fe_natra, GETDATE()) / 4.25) / 365) AS Edad
Y bueno eso sería la consulta, hasta el momento antes de agregar la ultima parte de la consulta en la que la involucraba la unión de tres tablas (para mostrar la columna "puesto" de la tabla c_puesto) funcionaba bien, pero ahora todos mis registros se repiten a excepción de los últimos 3 (fe, fepos y anyjub) son los únicos que si varían, y en mi consulta no se por que rayos me pide el sql que todos mis elementos del select los incluya en el group by, así que descarto agruparlos por algún registro, o cómo haría esto, ahm pero tal vez eso no tenga nada que ver... En fin mi consulta completa es esta:
Código SQL:
Ver original
SELECT TOP 10 b.nombre, A.rpe, b_traba1.nombre, b_traba1.fe_antre, b_traba1.fe_ingre, b2.fe_natra, BK.im_saldi, C.puesto, CONVERT (INT,(DATEDIFF (dd, b_traba3.fe_natra, GETDATE()) - DATEDIFF (yy, b_traba3.fe_natra, GETDATE()) / 4.25) / 365) AS Edad, b_traba1.sexotrab, b4.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 INNER JOIN b_traba1 AS b3 ON t1.fe_antre=b3.fe_antre, b_traba1, b_traba3, b_traba1 AS BT INNER JOIN b_traba3 AS b2 ON BT.rpe=b2.rpe, b_traba1 AS BJ INNER JOIN c_zonas AS b ON BJ.cl_zona=b.descr, b_kardex2 AS BK INNER JOIN b_traba1 AS A ON BK.rpe=A.rpe INNER JOIN c_puesto AS C ON BK.cl_puest=C.cl_puest, b_traba1 AS BU INNER JOIN c_ubica AS b4 ON BU.cl_ubica=b4.cl_ubica, c_puesto WHERE (DATEDIFF(yy, b_traba1.fe_antre, GETDATE()) > 25) AND (DATEDIFF(yy, b_traba3.fe_natra, GETDATE()) > 55) GROUP BY b.nombre, b_traba1.nombre, b_traba1.fe_antre, b_traba1.fe_ingre, b2.fe_natra, BK.im_saldi, C.puesto, b_traba1.sexotrab, b4.ubicapza, b_traba1.cl_nides, b_traba1.if_nire2, b_traba3.fe_natra, fe, A.rpe
Lo que hago ahora es el uso de alias en las tablas pero lo único que eh logrado es lo que mencione, que si me variaran los últimos tres registros los demás se repiten y repiten... Tal vez sean mis INNER JOIN ... antes solo igualaba con un WHERE mis tablas haciendo referencia al registro común entre las tablas pero no hubo gran diferencia... Espero no revolverlos tanto y no molestarlos, me gustaría y me pudiesen ayudar... Gracias de anteamano...