如果我有一个像这样的表变量,如何循环这个变量来进行一些处理:
DECLARE @userData TABLE(
userId int NOT NULL,
dayDate datetime NOT NULL,
transIn datetime NULL,
transOut datetime NULL,
attIn datetime NULL,
attOut datetime NULL,
MissionIn datetime NOT NULL,
MissionOut datetime NOT NULL,
empState varchar(10) NULL
);
INSERT INTO @userData
SELECT userid, trans_date,transtime_in,transtime_out,att_start_time,att_end_time,@Mission_fromdatetime,@Mission_todatetime,day_flag
FROM datatable_o a
WHERE a.userid = @userid AND a.trans_date = @date ORDER BY transtime_in ;
根据评论整个案例:
如果工作开始于 :att_start_time
结束于att_end_time
(work period]
每个员工都可以在同一日期多次入住和退房,以便我们跟踪他。签入存储在transtime_in
和签出存储在transtime_out
我有day_flag
,所以我可以知道这一天是“W”工作日还是“E”周末
现在考虑所有这些信息,除了emp_num ,date
我想为员工计算External mission over time
:
我有四种情况:
- No check-in-out && Not work day [周末] 所以员工应该把所有的任务时间都当作加班
- 没有签到&&工作日[缺席],所以员工应该只把任务期从工作期中拿出来
- 有签到&& 非工作日 [周末],因此员工应仅从这些签到中取出任务期间
- 有签出和工作日,因此员工应仅在这些签出和工作期间以外的任务期间进行。
例子 :
emp_num date att_start att_end mission-in mission-out
672 2015-3-4 07:05:00 13:30:00 12:12:00 20:00:00
emp_num date trans_in trans_out
672 2015-3-4 06:54:00 11:10:00
672 2015-3-4 12:00:00 14:05:00