我有一个工作订单表,如下所示,我需要将此表与一个班次表联系起来,以根据工单的时间检索工单所属的班次名称。
Date TimeOfEntry Plant ManufacturingLine OrderNumber
2017-06-13 11:56:58 3120 D19 100015234
2017-06-13 12:12:18 3120 MIX 100016098
2017-06-13 12:17:59 3120 D16 100015218
2017-06-13 12:21:01 3120 D19 100015234
2017-06-13 12:22:23 3120 D19 100016017
2017-06-13 12:43:52 3120 WW2 100015543
2017-06-13 12:45:49 3120 WW2 100015543
2017-06-13 13:00:26 3120 W43 100015574
2017-06-13 13:01:51 3120 PRE 100016148
2017-06-13 13:05:53 3120 MIX 100016095
----------------Shifts--------------------------
Plant Shift StartTime EndTime
3101 Day 06:01:00.0000000 14:00:00.0000000
3120 Day 06:01:00.0000000 14:00:00.0000000
3150 Day 06:01:00.0000000 14:00:00.0000000
3160 Day 06:01:00.0000000 14:00:00.0000000
3170 Day 06:01:00.0000000 14:00:00.0000000
3101 Afternoon 14:01:00.0000000 22:00:00.0000000
3120 Afternoon 14:01:00.0000000 22:00:00.0000000
3150 Afternoon 14:01:00.0000000 22:00:00.0000000
3160 Afternoon 14:01:00.0000000 22:00:00.0000000
3170 Afternoon 14:01:00.0000000 22:00:00.0000000
3101 Night 22:01:00.0000000 06:00:00.0000000
3120 Night 22:01:00.0000000 06:00:00.0000000
3150 Night 22:01:00.0000000 06:00:00.0000000
3160 Night 22:01:00.0000000 06:00:00.0000000
3170 Night 22:01:00.0000000 06:00:00.0000000
我想要使用的逻辑是If(TimeOfEntry介于Shift.StartTime和ShiftFinishTime之间)然后是Shift.Shift。
知道我该怎么办?提前谢谢。
答案 0 :(得分:0)
由于夜班,这很棘手。
您可以使用select wo.*, s.shift
from workorders wo join
shifts s
on wo.plant = s.plant and
((s.starttime < s.endtime and
TimeOfEntry between s.starttime and s.endtime
) or
(s.starttime > s.endtime and
TimeOfEntry not between s.endtime and s.starttime
)
);
,但使用特殊逻辑:
array