Случаи довольно простые ..
В случае единственного времени есть только 3 способа классификации времени - до, после и после. Здесь участвуют два раза, поэтому результаты 3 x 3 = 9.
Хотя есть кое-что, что нужно сказать о согласованности, потому что для _start это звучит так:
on - after - before
Принимая во внимание, что _end время, это идет
on - before - after
Объедините их, используя (не принимая во внимание NULL):
case when programme_start = attend_start then 0
when programme_start < attend_start then 3
else 6 end
+
case when programme_end = attend_end then 1
when programme_end > attend_end then 2
else 3 end
AS Category