Closed GoogleCodeExporter closed 8 years ago
[deleted comment]
Esta consulta resuelve los datos requeridos.
Es media compleja porque tiene varios IF Anidados y CASE dentro de IF. Es
similar a la del issue 48 , pero con un IF mas de si el FechaCorrespondiente
es feriado o no.
SELECT emp.NroEmpleado, emp.Nombre, emp.Apellido, emp.FechaIngreso,
emp.FechaBaja,
-- Hs Comunes
CAST(SEC_TO_TIME(SUM(TIME_TO_SEC(IF(MAKEDATE(2000,DAYOFYEAR(hge.FechaCorrespondi
ente)) in (SELECT fecha FROM feriados), /* FERIADOS */ 0, /* NO FERIADOS */ IF
(cargo.CobraHsExtras=1, CASE WHEN
TIMEDIFF(TIMEDIFF(hge.HoraSalida,hge.HoraEntrada),MAKETIME(cargo.CantidadHsComun
es,0,0)) <0 THEN TIMEDIFF(hge.HoraSalida,hge.HoraEntrada) WHEN
TIMEDIFF(TIMEDIFF(hge.HoraSalida,hge.HoraEntrada),MAKETIME(cargo.CantidadHsComun
es,0,0)) >= 0 THEN MAKETIME(cargo.CantidadHsComunes,0,0) END,
TIMEDIFF(hge.HoraSalida,hge.HoraEntrada)))))) AS CHAR) AS SENCILLAS_X1
,
-- Hs Extras (2X)
CAST(SEC_TO_TIME(SUM(TIME_TO_SEC(IF(MAKEDATE(2000,DAYOFYEAR(hge.FechaCorrespondi
ente)) in (SELECT fecha FROM feriados), /*FERIADOS*/ 0, /* NO FERIADOS */ IF
(cargo.CobraHsExtras=1,CASE WHEN
TIMEDIFF(TIMEDIFF(hge.HoraSalida,hge.HoraEntrada),MAKETIME(cargo.CantidadHsComun
es,0,0)) <0 THEN 0 ELSE
TIMEDIFF(TIMEDIFF(hge.HoraSalida,hge.HoraEntrada),MAKETIME(cargo.CantidadHsComun
es,0,0)) END, 0))))) AS CHAR) AS EXTRAS_X2
,
-- Feriado Hs Comunes (2X)
CAST(SEC_TO_TIME(SUM(TIME_TO_SEC(IF(MAKEDATE(2000,DAYOFYEAR(hge.FechaCorrespondi
ente)) in (SELECT fecha FROM feriados), /*FERIADOS*/ IF (cargo.CobraHsExtras=1,
CASE WHEN
TIMEDIFF(TIMEDIFF(hge.HoraSalida,hge.HoraEntrada),MAKETIME(cargo.CantidadHsComun
es,0,0)) <0 THEN TIMEDIFF(hge.HoraSalida,hge.HoraEntrada) WHEN
TIMEDIFF(TIMEDIFF(hge.HoraSalida,hge.HoraEntrada),MAKETIME(cargo.CantidadHsComun
es,0,0)) >= 0 THEN MAKETIME(cargo.CantidadHsComunes,0,0) END,
TIMEDIFF(hge.HoraSalida,hge.HoraEntrada)), /* NO FERIADOS */ 0)))) AS CHAR) AS
FERIADO_TRABAJADO_X2
,
-- Feriado Hs Extras (2.5X)
CAST(SEC_TO_TIME(SUM(TIME_TO_SEC(IF(MAKEDATE(2000,DAYOFYEAR(hge.FechaCorrespondi
ente)) in (SELECT fecha FROM feriados), /*FERIADOS*/ IF
(cargo.CobraHsExtras=1,CASE WHEN
TIMEDIFF(TIMEDIFF(hge.HoraSalida,hge.HoraEntrada),MAKETIME(cargo.CantidadHsComun
es,0,0)) <0 THEN 0 ELSE
TIMEDIFF(TIMEDIFF(hge.HoraSalida,hge.HoraEntrada),MAKETIME(cargo.CantidadHsComun
es,0,0)) END, 0),/* NO FERIADOS */ 0)))) AS CHAR) AS FERIADO_TRABAJADO_EXTRAS_X3
FROM horasgeneradasescalafon hge, Empleados emp, TiposCargos cargo
WHERE hge.FechaCorrespondiente between 'FECHADESDE' AND 'FECHAHASTA' AND
emp.NroEmpleado = hge.NroEmpleado AND emp.IdCargo = cargo.IdCargo AND
hge.NroEmpleado not in (9998,9999)
GROUP BY emp.NroEmpleado, emp.Nombre, emp.Apellido, emp.FechaIngreso,
emp.FechaBaja
Original comment by juanga...@gmail.com
on 22 Apr 2011 at 3:34
Tiempo: 1 hora y media.
Original comment by juanga...@gmail.com
on 22 Apr 2011 at 3:56
Se corrige listado:
SELECT emp.NroEmpleado, emp.Nombre, emp.Apellido, emp.FechaIngreso,
emp.FechaBaja,
/* NO FERIADOS */
/*HS COMUNES*/
sec_to_time(SUM(time_to_sec(IF(MAKEDATE(2000,DAYOFYEAR(HorasTmp.FechaCorrespondi
ente)) not in (SELECT fecha FROM feriados), IF (cargo.CobraHsExtras=1,
/*EXTRAS*/CASE WHEN
TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) <0 THEN
HorasTmp.Horas WHEN
TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) >= 0 THEN
MAKETIME(cargo.CantidadHsComunes,0,0) END, HorasTmp.Horas),MAKETIME(0,0,0)))))
AS SENCILLAS_X1
, /*HS EXTRAS (X2)*/
sec_to_time(SUM(time_to_sec(IF(MAKEDATE(2000,DAYOFYEAR(HorasTmp.FechaCorrespondi
ente)) not in (SELECT fecha FROM feriados), IF(cargo.CobraHsExtras=1,CASE WHEN
TIMEDIFF
(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) < 0 THEN MAKETIME(0,0,0)
ELSE TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0))
END,MAKETIME(0,0,0)),MAKETIME(0,0,0))))) AS EXTRAS_X2
,
/* FERIADOS */
sec_to_time(SUM(time_to_sec(IF(MAKEDATE(2000,DAYOFYEAR(HorasTmp.FechaCorrespondi
ente)) in (SELECT fecha FROM feriados), /*HS COMUNES FERIADOS (X2)*/
IF (cargo.CobraHsExtras=1, /*EXTRAS*/CASE WHEN TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) <0 THEN HorasTmp.Horas WHEN TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) >= 0 THEN MAKETIME(cargo.CantidadHsComunes,0,0) END, HorasTmp.Horas),MAKETIME(0,0,0))))) AS FERIADO_TRABAJADO_X2,
/*HS EXTRAS FERIADOS (X2_5)*/
sec_to_time(SUM(time_to_sec(IF(MAKEDATE(2000,DAYOFYEAR(HorasTmp.FechaCorrespondi
ente)) in (SELECT fecha FROM feriados),IF (cargo.CobraHsExtras=1,CASE WHEN
TIMEDIFF
(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) < 0 THEN MAKETIME(0,0,0)
ELSE TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0))
END,MAKETIME(0,0,0)),MAKETIME(0,0,0))))) AS FERIADO_TRABAJADO_EXTRAS_X2_5
FROM
(SELECT hgeaux.NroEmpleado,hgeaux.FechaCorrespondiente,
sec_to_time(SUM(time_to_sec(TIMEDIFF(hgeaux.HoraSalida,hgeaux.HoraEntrada))))
as Horas from horasgeneradasescalafon hgeaux WHERE hgeaux.FechaCorrespondiente
between 'FECHADESDE' and 'FECHAHASTA'
AND hgeaux.NroEmpleado not in (9998,9999)
AND hgeaux.Descanso=0
group by hgeaux.NroEmpleado,hgeaux.FechaCorrespondiente) AS HorasTmp,
Empleados emp, TiposCargos cargo
WHERE
emp.NroEmpleado=HorasTmp.NroEmpleado
and emp.IdCargo=cargo.IdCargo and cargo.TipoFacturacion='JORNALERO'
GROUP BY emp.NroEmpleado, emp.Nombre, emp.Apellido
Original comment by juanga...@gmail.com
on 27 Jun 2011 at 12:37
Se corrige nuevamente, queda con la misma logica resuelta que el listado que se
envia al estudio contable.
SELECT emp.NroEmpleado, emp.Nombre, emp.Apellido, emp.FechaIngreso,
emp.FechaBaja,
/* NO FERIADOS */ /*HS COMUNES*/ CAST(sec_to_time(SUM(time_to_sec(IF(MAKEDATE(2000,DAYOFYEAR(HorasTmp.FechaCorrespondiente)) not in (SELECT fecha FROM feriados), IF (cargo.CobraHsExtras=1, /*EXTRAS*/CASE WHEN TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) <0 THEN HorasTmp.Horas WHEN TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) >= 0 THEN MAKETIME(cargo.CantidadHsComunes,0,0) END, HorasTmp.Horas),MAKETIME(0,0,0))))) AS CHAR) AS SENCILLAS_X1, /*HS EXTRAS (X2)*/ CAST(sec_to_time(SUM(time_to_sec(IF(MAKEDATE(2000,DAYOFYEAR(HorasTmp.FechaCorrespondiente)) not in (SELECT fecha FROM feriados), IF(cargo.CobraHsExtras=1,CASE WHEN TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) < 0 THEN MAKETIME(0,0,0) ELSE TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) END,MAKETIME(0,0,0)),MAKETIME(0,0,0))))) AS CHAR) AS EXTRAS_X2, /* FERIADOS */ CAST(sec_to_time(SUM(time_to_sec(IF(MAKEDATE(2000,DAYOFYEAR(HorasTmp.FechaCorrespondiente)) in (SELECT fecha FROM feriados), /*HS COMUNES FERIADOS (X2)*/ IF (cargo.CobraHsExtras=1, /*EXTRAS*/CASE WHEN TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) <0 THEN HorasTmp.Horas WHEN TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) >= 0 THEN MAKETIME(cargo.CantidadHsComunes,0,0) END, HorasTmp.Horas),MAKETIME(0,0,0))))) AS CHAR) AS FERIADO_TRABAJADO_X2, /*HS EXTRAS FERIADOS (X2_5)*/ CAST(sec_to_time(SUM(time_to_sec(IF(MAKEDATE(2000,DAYOFYEAR(HorasTmp.FechaCorrespondiente)) in (SELECT fecha FROM feriados),IF (cargo.CobraHsExtras=1,CASE WHEN TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) < 0 THEN MAKETIME(0,0,0) ELSE TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) END,MAKETIME(0,0,0)),MAKETIME(0,0,0))))) AS CHAR) AS FERIADO_TRABAJADO_EXTRAS_X2_5
FROM
(SELECT hgeaux.NroEmpleado,hgeaux.FechaCorrespondiente,
sec_to_time(SUM(time_to_sec(TIMEDIFF(hgeaux.HoraSalida,hgeaux.HoraEntrada))))
as Horas from horasgeneradasescalafon hgeaux WHERE hgeaux.FechaCorrespondiente
between 'FECHADESDE' and 'FECHAHASTA'
AND hgeaux.NroEmpleado not in (9998,9999)
AND hgeaux.Descanso=0
group by hgeaux.NroEmpleado,hgeaux.FechaCorrespondiente) AS HorasTmp,
Empleados emp, TiposCargos cargo
WHERE
emp.NroEmpleado=HorasTmp.NroEmpleado
and emp.IdCargo=cargo.IdCargo and cargo.TipoFacturacion='JORNALERO'
GROUP BY emp.NroEmpleado, emp.Nombre, emp.Apellido
Original comment by juanga...@gmail.com
on 27 Jun 2011 at 3:17
Original issue reported on code.google.com by
juanga...@gmail.com
on 19 Apr 2011 at 6:35Attachments: