一个难对应的考勤明细表的存储过程(400分的题,另开页加分300;完成后再加分,这个表对我来说太重要了,请来帮忙)
一个数据库的每天考勤表(TF_KQ)的內容如下:
YG_NO varchar(20)->为工号; BAN_NO varchar(4)->班别; TRS_DD datetime ->为打卡日期;
下为这表的例子以一个工号A002 打卡为2004-10-08天 的数据为准;
YG_NO BAN_NO TRS_DD
------------------------------------------------------------------
A002 002 2004-10-08 07:23:00.000
A002 002 2004-10-08 07:22:00.000
A002 002 2004-10-08 11:31:00.000
A002 002 2004-10-08 12:04:00.000
A002 002 2004-10-08 12:29:00.000
A002 002 2004-10-08 12:45:00.000
A002 002 2004-10-08 12:51:00.000
A002 002 2004-10-08 13:24:00.000
A002 002 2004-10-08 17:33:00.000
A002 002 2004-10-08 17:45:00.000
A002 002 2004-10-08 19:22:00.000
A002 002 2004-10-08 19:25:00.000
A002 002 2004-10-08 20:22:00.000
A002 002 2004-10-08 02:25:00.000
A003 ... ......................
A003 ... ......................
...
又一个数据库每天对每一员工有一实登基数的表(TF_TZ)的內容如下:
YG_NO varchar(20)->为工号;SZ_NO varchar(4)->班别;TRS_DD datetime ->为打卡日期;
QTY numeric(28,8) 基数; CH_ID varchar(1)->审核否
YG_NO SZ_NO TRS_DD QTY CH_ID
------------------------------------------------------------------
... ... .............. .... ..
A002 002 2005-08-07 00:00:00.000 4.00000000 N
A002 002 2005-08-08 00:00:00.000 2.00000000 Y
A002 002 2005-08-09 00:00:00.000 3.00000000 N
A002 002 2005-08-10 00:00:00.000 7.00000000 N
... ... .............. .... ..
两个表通过 (YG_NO,SZ_NO,TRS_DD)来关联
对考勤表(TF_KQ)条件是:
1,上午上班刷卡有效时间为:早上7:00刷卡,刷卡前后30分钟有效,如果同时这时间内有刷两次以上以最后一次为准;
2、中午下班刷卡时间为12:00,刷卡前后30分钟有效,如果同时这时间内有刷两次以上以最后一次为准;
3、下午上班刷卡时间为13:30,刷卡前后30分钟有效,如果同时这时间内有刷两次以上以最后一次为准;
4、下午下班刷卡时间为18:00,刷卡前后30分钟有效,如果同时这时间内有刷两次以上以最后一次为准;
5、晚上加班入刷卡时间为19:01,刷卡前后30分钟有效,如果同时这时间内有刷两次以上以最后一次为准;
6、晚上加班出刷卡时间为第二天的04:00钟,刷卡从19:31至第二天04:30分钟有效,如果同时这时间内有刷两次以上以最后一次为准;
对考勤表(TF_TZ)条件是:
1、JBS(加班时数)=SJ_C(加班出)-SJ_Y(加班入);
2、工时=9;
3、KJ(旷职)=9-{(SC_C(用餐出)-SB_Y(上班入))+(SB_C(下班出)-SC_Y(用餐入))};->如果KJ(旷职)<0时就为空;
4、QTY(基数)=表(TF_TZ)的对应工号与班别对应当天的QTY;
目的:以TRS_DD为打卡日期变量范围和YG_NO为工号变量范围写一个存储过程明细表如下:
YG_NO SZ_NO TRS_DD SB_Y SC_C SC_Y SB_C SJ_Y SJ_C JBS KJ GS QTY
A002 002 05-10-08 07:22 12:29 13:24 17:45 19:25 02:26 07:01 0 9 2
..................................................................................
以上表的字段意义:
SB_Y(上班入)
SC_C(用餐出)
SC_Y(用餐入)
SB_C(下班出)
SJ_Y(加班入)
SJ_C(加班出)
JBS(加班时数)
KJ(旷职)
GS(工时)
QTY(基数)
请各位来帮忙,来看看,谢谢了!