yo haría algo así, en pseudo código
Código SQL
[-]
select EMPLEADOS.Nombre, EMPLEADOS.Apellidos,
max( case when TMARCACIONES.hora entre 8:00 y 9:00 then TMARCACIONES.hora else 0) AS ENTRADA,
max( case when TMARCACIONES.hora entre 12:00 y 13:00 then TMARCACIONES.hora else 0) AS SALIDA_ ALMUERZO,
max( case when TMARCACIONES.hora entre 14:00 y 15:00 then TMARCACIONES.hora else 0) AS ENTRADA_TARDE,
max( case when TMARCACIONES.hora entre 18:00 y 19:00 then hora else 0) AS SALIDA_JORNADA
FROM TMARCACIONES WHERE CAST(HORA as Date) = :Fecha
inner join EMPLEADOS ON EMPLEADOS.ID_EMPLEADOS = TMARCACIONES.ID_EMPLEADOS
group by EMPLEADOS.Nombre, EMPLEADOS.Apellidos
Ni with ni chanflainas. Supongo que es lo mismo que
Código SQL
[-]select TABLA.* from
( select campo1, campo2 from TABLAX bla bla bla ) TABLA
group by bla bla
order by bla bla
Sólo falta ver qué pasa cuando una persona no ficha entre esas horas, excepciones de salidas la médico, etc etc que deberían ser recogidas también.
Espero que te sirva de ayuda.
Un saludo