Hola
No entiendo bien la sentencia sql, pero me parece que la segunda parte seria asi:
Código SQL
[-]
WITH HORASEMPL AS
(
SELECT ID_EMPLEADOS, HORA, ROW_NUMBER() OVER (PARTITION BY ID_EMPLEADOS ORDER BY HORA) AS IDE
FROM TMARCACIONES WHERE CAST(HORA as Date) = Fecha
)
SELECT
he.IDEMPLEADO, CAST(he.HORAMARCA as Date) AS Fecha, CAST(he.HORAMARCA as time) As HoraEntrada, CAST(he.HORAMARCA as time) As HoraSalidaAlmuerzo
,CAST(he.HORAMARCA as time) As HoraEntradaAlmuerzo,CAST(he.HORAMARCA as time) As HoraSalida = CASE
WHEN CAST(HORA as TIME) = CAST(f.HORA as TIME) then NULL
WHEN CAST(HORA as TIME) = CAST(s.HORA as TIME) then NULL
ELSE CAST(HORA as TIME)
END
LEFT JOIN (SELECT id_empleados, MIN(HoraMarca) HoraMarca FROM HORASEMPL WHERE IDE > 1 GROUP BY IdEmpleado)as h ON h.id_empleados = he.id_empleados
LEFT JOIN (SELECT id_empleados, MIN(HoraMarca) HoraMarca FROM HORASEMPL WHERE IDE > 2 GROUP BY IdEmpleado) AS f ON f.id_empleados = he.id_empleados
LEFT JOIN (SELECT id_empleados, max(HoraMarca) HoraMarca FROM HORASEMPL WHERE IDE > 1
FROM HORASEMPL he
GROUP BY IdEmpleado) AS g ON g.id_empleados = he.id_empleados
ORDER BY he.IDEMPLEADO
Saludos