そのようなテーブル変数がある場合、この変数をループして処理を行う方法:
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
すべての従業員は、同じ日に何度もチェックインおよびチェックアウトできるため、彼に従うことができました。に保存されたチェックインとに保存されたtranstime_in
チェックアウトtranstime_out
そして、私はday_flag
その日が「W」の勤務日または「E」の週末であることを知ることができるようにしました
これらすべての情報に加えて、emp_num ,date
私は従業員のために計算したいExternal mission over time
:
私には4つのケースがあります:
- 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