我正在将以下逻辑转换为MySQL CASE语句,我确信有一种优雅的方式可以做到这一点,但我认为我一直在努力工作太长时间而且让我感到困惑!
业务规则:
个人在一个时期内参加多个课程,他们只能参加以下一个考勤范围:
我需要做的是将每个范围分类为类别类型,即类型1 ... 9.但我在构建CASE语句时遇到问题,该语句可以互相覆盖每个范围。
以前有人做过这样的事吗?如果没有人可以帮助它背后的逻辑?
提前致谢!
答案 0 :(得分:5)
案件非常简单..
在一次性的情况下,只有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