Во-первых, вам, вероятно, следует подумать об использовании поля DateTime для хранения StartTime и EndTime, чтобы упростить вычисления и устранить необходимость в поле Date.
SELECT t1.EmpID,
t1.StartTime,
t1.EndTime,
t2.StartTime
t2.EndTime,
FROM lab t1
LEFT OUTER JOIN lab t2
ON t2.StartTime BETWEEN t1.StartTime AND t1.EndTime
AND t2.EmpID = t1.EmpID
ORDER BY t1.EmpID,
t1.StartTime,
t2.StartTime
Это не даст вам точный формат, который вы перечислили, но он близок. Вы должны в конечном итоге:
| EmpID| Name| Normal Period | Overlapping Period |
------------------------------------------------------------
| 1 | Jon | 10:00 AM | 12:15 PM | 11:00 AM | 02:15 PM |
------------------------------------------------------------
| 2 | Smith | 10:00 AM | 12:10 PM | NULL | NULL |
------------------------------------------------------------
Каждый перекрывающийся период в пределах нормального периода будет отображаться в новой строке, но любой период без перекрытий будет иметь только одну строку. Вы можете легко объединить поля, если вам нужен формат "xx: xx xx to xx: xx xx". Надеюсь, это поможет вам.