Me ha costado llegar a la solucion de una SQL, realmente una SQL que ya tenia y funciona bien, hasta que me indicaron que esta no solo debia cargar los registros que coincidieran entre dos tablas, sino que traiga tambien los que no emparejen entre ellas.
La SQL, como decia, hacia su cometido pero filtrado todo con WHERE.
Es una relacion entre la tabla EMPLEADOS y otra llamada PAGO_PRIMA_LEGAL
El WHERE obviamente solo me traeria registros de Empleados que tengan datos en la 2da tabla, pero como ahora me indican que debe cargarse tambien los Empleados que igual no tengan registros de la 2da tabla, es claro que debo cambiar el WHERE por LEFT JOIN y en otros casos INNER JOIN.
Este es el archivo Excel donde llenan los datos a mano:
http://www.pasteall.org/pic/show.php?id=14552
Y esta es la salida de la SQL que he hecho que haga lo mismo: (esta en Access)
http://www.pasteall.org/pic/show.php?id=14553
Me costo algo que esa informacion saliese de forma horizontal y no vertical, la SQL completa es esta:
http://pastie.org/2163862
Realmente, si se fijan Dia2 es una copia de Dia1 pero filtrando por numDia=2, numDia=3, numDia=4... etc.
La SQL originalmente reducida o desde su inicio seria esta:
Código SQL:
Ver original
SELECT DISTINCT (PPL.numemple), E.apellido+" "+E.nombre AS Nombre, (SELECT Ausencia.alias FROM pago_prima_legal PPL1, PPL_leyenda Ausencia WHERE PPL1.numemple=PPL.numemple AND PPL1.fechaElab BETWEEN RP.fechaDEL AND RP.fechaAL AND PPL1.id_status=Ausencia.id AND NumDia=1) AS Dia1 FROM pago_prima_legal AS PPL, empleados AS E, PPL_leyenda AS STATUS, reportes AS RP WHERE PPL.numemple=E.numempleado AND PPL.fechaElab BETWEEN RP.fechaDEL AND RP.fechaAL AND PPL.id_status=STATUS.id GROUP BY PPL.numemple, E.nombre, E.apellido, RP.fechaDEL, RP.fechaAL, STATUS.alias;
He tenido errores al intentar hacer una SQL en vez de WHERE, con INNER JOIN, LEFT JOIN, etc de mas de 2 tablas relacionadas, es decir, JOINs multiples.
En los Screenshot, puede verse en el de la Hoja de Calculo, que he marcado con unos puntos azules unos registros de empleado, esos son los que no tienen nada en la 2da tabla. Obviamente mientras la SQL este filtrando bajo WHERE y no por LEFT JOIN pues nunca me van a salir los Empleados en blanco que no tengan relacion con la 2da tabla.
Un JOIN entre dos tablas me resulta bien, pero cuando intento hacer crecer la SQL anexando una 3era tabla o mas, pues es cuando tengo el FAIL.
He tratado de hacer pruebas con esto, pero sin resultado:
Código SQL:
Ver original
SELECT DISTINCT (PPL.numemple), E.apellido+" "+E.nombre AS Nombre, (SELECT Ausencia.alias FROM pago_prima_legal PPL1, PPL_leyenda Ausencia WHERE PPL1.numemple=PPL.numemple AND PPL1.fechaElab BETWEEN #01/05/2011# AND #31/05/2011# AND PPL1.id_status=Ausencia.id AND NumDia=1) AS Dia1 FROM empleados AS E LEFT JOIN pago_prima_legal AS PPL ON E.numempleado=PPL.numemple INNER JOIN PPL_leyenda STATUS ON PPL.id_status=STATUS.id WHERE PPL.fechaElab BETWEEN #01/05/2011# AND #31/05/2011# GROUP BY PPL.numemple, E.nombre, E.apellido, RP.fechaDEL, RP.fechaAL, STATUS.alias;
He lidiado con este desde el Sabado mirando en Google y ya hoy Lunes pues considere que ya debia pedir algo de ayuda.