No me corras el símbolo decimal.


Para que no te confundas con tu moneda, te lo pongo en dólares (a tasa de hoy, según el cambio argentino de 4,02): 252,28. Te lo dejo directamente a 250 dlrs.

Saludos,
Escrito 29 septiembre 2010 - 11:27
Escrito 02 octubre 2010 - 03:42
SELECT A.EMP_ID, A.AST_FECHA, A.AST_TIME1,A.AST_TIME2, A.CA_ID, EXTRACT(WEEKDAY FROM A.AST_FECHA) AS DIA, E.EMP_NAME, E.EMP_LAST, E.EMP_AREA, E.EMP_TURNO, H.HORA_ENT, H.HORA_SAL FROM ASISTENCIA A LEFT JOIN EMPLEADOS E ON E.EMP_ID = A.EMP_ID LEFT JOIN HORARIOS H ON H.HORA_ID = E.EMP_TURNO WHERE A.AST_FECHA >= :DESDE AND A.AST_FECHA <= :HASTA AND A.EMP_ID IN (SELECT EMP_ID FROM EMPLEADOS)
Escrito 02 octubre 2010 - 04:10
Escrito 02 octubre 2010 - 04:34
Escrito 03 octubre 2010 - 07:49
SELECT A.EMP_ID, A.AST_FECHA, A.AST_TIME1,A.AST_TIME2, A.CA_ID, EXTRACT(WEEKDAY FROM A.AST_FECHA) AS DIA, E.EMP_NAME, E.EMP_LAST, E.EMP_AREA, E.EMP_TURNO, H.HORA_ENT, H.HORA_SAL FROM ASISTENCIA A JOIN EMPLEADOS E ON E.EMP_ID = A.EMP_ID JOIN HORARIOS H ON H.HORA_ID = E.EMP_TURNO WHERE A.AST_FECHA >= :DESDE AND A.AST_FECHA <= :HASTA AND A.EMP_ID IN (SELECT EMP_ID FROM EMPLEADOS)
Escrito 04 octubre 2010 - 07:02
Vaya... creo que te mandé a la horca con mi diseño
![]()
A ver si voy comprendiendo... seguiste mi propuesta y tienes la tabla HORARIOS y la tabla DIAS, y la tabla DIAS_HORARIOS como la intermedia entre ambas.
Perfecto, allí voy entendiendo.
Luego tienes las tablas EMPLEADOS y la tabla ASISTENCIA... y allí me pierdoNo logro entender como es la relación entre las tablas EMPLEADO y ASISTENCIA con las anteriores...
Si me puedes describir a la tabla EMPLEADO y ASISTENCIA quizá logre verlo mejor.
¿La consulta que expones te da los datos agrupados por usuario? O tu por claridad los tabulaste de ese modo? Porque no veo la cláusula GRUOP BY.
Saludos,
SELECT A.EMP_ID, A.AST_FECHA, A.AST_TIME1, A.AST_TIME2, A.CA_ID, EXTRACT(WEEKDAY FROM A.AST_FECHA) AS DIA, E.EMP_NAME, E.EMP_LAST, E.EMP_AREA, E.EMP_TURNO, H.HORA_ENT, H.HORA_SAL FROM ASISTENCIA A LEFT JOIN EMPLEADOS E ON E.EMP_ID = A.EMP_ID LEFT JOIN HORARIOS H ON H.HORA_ID = E.EMP_TURNO LEFT JOIN DIAS_HORARIOS DH ON DH.HORA_ID = H.HORA_ID WHERE A.AST_FECHA >= :DESDE AND A.AST_FECHA <= :HASTA AND A.EMP_ID IN (SELECT EMP_ID FROM EMPLEADOS) GROUP BY A.EMP_ID, A.AST_FECHA, A.AST_TIME1, A.AST_TIME2, A.CA_ID, E.EMP_NAME, E.EMP_LAST, E.EMP_AREA, E.EMP_TURNO, H.HORA_ENT, H.HORA_SAL ORDER BY E.EMP_LAST, E.EMP_NAME, E.EMP_AREA, A.AST_FECHA
Escrito 04 octubre 2010 - 07:36
Escrito 04 octubre 2010 - 07:47
Escrito 04 octubre 2010 - 06:31
Escrito 05 octubre 2010 - 09:36
Escrito 05 octubre 2010 - 09:44
SET TERM ^ ; CREATE OR ALTER PROCEDURE LISTAASISTENCIA ( fdesde DATE, fhasta DATE) RETURNS ( ast_id INTEGER, emp_id INTEGER, ast_fecha DATE, ca_id INTEGER, ast_time1 TIME, ast_time2 TIME, ast_time3 TIME, ast_time4 TIME, nombre_dia VARCHAR(15)) AS DECLARE variable cuantos INTEGER; BEGIN /* Recorre las asistencias entre las fechas */ FOR SELECT ast_id, emp_id, ast_fecha, ca_id, ast_time1, ast_time2, ast_time3, ast_time4 FROM Asistencia WHERE AST_FECHA >= :fdesde AND AST_FECHA <= :fhasta AND ((ast_time1 IS NOT NULL) OR (ast_time2 IS NOT NULL) OR (ast_time3 IS NOT NULL) OR (ast_time4 IS NOT NULL) ) ORDER BY emp_id, ast_fecha INTO :ast_id, :emp_id, :ast_fecha, :ca_id, :ast_time1, :ast_time2, :ast_time3, :ast_time4 do BEGIN SELECT COUNT(*) FROM dias_horarios dh WHERE dh.hora_id = (SELECT EMP_turno FROM empleados E WHERE E.emp_id = :emp_id) AND dh.dia_id = EXTRACT(weekday FROM :ast_fecha) INTO :cuantos; IF (:cuantos > 0) THEN BEGIN SELECT DIA_NOMBRE FROM DIAS WHERE DIA_ID = EXTRACT(weekday FROM :ast_fecha) INTO :nombre_dia; suspend; END END END^ SET TERM ; ^ GRANT SELECT ON ASISTENCIA TO PROCEDURE LISTAASISTENCIA; GRANT SELECT ON DIAS_HORARIOS TO PROCEDURE LISTAASISTENCIA; GRANT SELECT ON EMPLEADOS TO PROCEDURE LISTAASISTENCIA; GRANT SELECT ON DIAS TO PROCEDURE LISTAASISTENCIA; GRANT EXECUTE ON PROCEDURE LISTAASISTENCIA TO SYSDBA;
Escrito 05 octubre 2010 - 10:39
SET TERM ^ ; CREATE OR ALTER PROCEDURE LISTAASISTENCIA ( fdesde DATE, fhasta DATE) RETURNS ( ast_id INTEGER, emp_id INTEGER, ast_fecha DATE, ca_id INTEGER, ast_time1 TIME, ast_time2 TIME, nombre_dia VARCHAR(15)) AS DECLARE variable cuantos INTEGER; BEGIN /* Recorre las asistencias entre las fechas */ FOR SELECT ast_id, emp_id, ast_fecha, ca_id, ast_time1, ast_time2 FROM Asistencia WHERE AST_FECHA >= :fdesde AND AST_FECHA <= :fhasta ORDER BY emp_id, ast_fecha INTO :ast_id, :emp_id, :ast_fecha, :ca_id, :ast_time1, :ast_time2 do BEGIN SELECT COUNT(*) FROM dias_horarios dh WHERE dh.hora_id = (SELECT EMP_turno FROM empleados E WHERE E.emp_id = :emp_id) AND dh.dia_id = EXTRACT(weekday FROM :ast_fecha) INTO :cuantos; IF (:cuantos > 0) THEN BEGIN SELECT DIA_NOMBRE FROM DIAS WHERE DIA_ID = EXTRACT(weekday FROM :ast_fecha) INTO :nombre_dia; suspend; END END END^ SET TERM ; ^ GRANT SELECT ON ASISTENCIA TO PROCEDURE LISTAASISTENCIA; GRANT SELECT ON DIAS_HORARIOS TO PROCEDURE LISTAASISTENCIA; GRANT SELECT ON EMPLEADOS TO PROCEDURE LISTAASISTENCIA; GRANT SELECT ON DIAS TO PROCEDURE LISTAASISTENCIA; GRANT EXECUTE ON PROCEDURE LISTAASISTENCIA TO SYSDBA;
Escrito 05 octubre 2010 - 11:43
Escrito 05 octubre 2010 - 03:52
Pues no se me pasó por la cabeza la idea de un SP. Bua... no me funciona la cabeza
Saludos,
Escrito 05 octubre 2010 - 04:26
ya eso lo sabiamos amigo
:p jejeje