2011-03-20 82 views
2

我正在将以下逻辑转换为MySQL CASE语句,我确定有一种优雅的方式来执行此操作,但我认为我一直在努力工作太久而且感到困惑我的自我!将复杂逻辑转换为MySQL CASE语句

的业务规则:

  • 程序有一个programme_start和programme_end
  • 个人有一个attend_start和attend_end

个人在一个周期内参加多个项目,他们只能有一个以下示例考勤跨度:

enter image description here

我需要做的是将每个跨度分类到一个类别类型,即类型1 ... 9.但我无法建立一个CASE语句,它可以相互独立地覆盖每个跨度。

有没有人做过这样的事情?如果没有人可以帮助其背后的逻辑?

在此先感谢!

回答

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 
+0

整洁的把戏加上案件在一起!还没有决定,如果我认为这是黑客或天堂......但你得到我的投票:) – Ronnis 2011-03-20 22:16:20

+0

好工作!谢谢! – schone 2011-03-21 00:38:34