一个难对应的考勤明细表的存储过程->这个以前我一直没有想到一个排班的问题(我出的的大错误!)罚自已再出500分

BarryW 2005-09-21 06:48:25
出这个贴感到没有办法向libin_ftsafe交待了,他一直来的帮助,到最后还没有表达正确的结果,,,,为止感到很歉意....;这是我非常重要的一个表的数据,客户就急着看我这个东东,实施本不应停在这问题上的,但没有办法;先再谢谢了;


把问题重新整理一下:
一个数据库的每天考勤表(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 2005-10-08 07:23:00.000
A002 002 2005-10-08 07:22:00.000

A002 002 2005-10-08 11:31:00.000
A002 002 2005-10-08 12:04:00.000
A002 002 2005-10-08 12:29:00.000

A002 002 2005-10-08 12:45:00.000
A002 002 2005-10-08 12:51:00.000
A002 002 2005-10-08 13:24:00.000

A002 002 2005-10-08 17:33:00.000
A002 002 2005-10-08 17:45:00.000

A002 002 2005-10-08 19:22:00.000
A002 002 2005-10-08 19:25:00.000

A002 002 2005-10-08 20:22:00.000
A002 002 2005-10-08 02:25:00.000
A003 ... ......................
A003 ... ......................

有一个BAN_NO 对应的班别表(tf_ban)的内容如下:
BAN_NO(4)->班别号;RNG_ITM班别的序号;STR_TIME1->星期一;STR_TIME2->星期二;STR_TIME3->星期三;STR_TIME4->星期四;
STR_TIME5->星期五;STR_TIME6->星期六;STR_TIME6->星期日;
IO_ID->出、入("1"代表上班入;"2"代表下班出;"3"代表加班入;"4"代表加班出;);OVER_MIN->迟到/早退多小分钟不计;
VLD_MIN->多少分钟内打卡时间有效(如上班入、加班入的就前这个内的分钟打卡有效,下班出、加班出的就后这个内的分钟打卡有效;如果同时这时间内有刷两次以上以最后一次为准);

BAN_NO RNG_ITM STR_TIME1 STR_TIME2 STR_TIME3 STR_TIME4 STR_TIME5 STR_TIME6 STR_TIME7 RNG_NAME IO_ID OVER_MIN KQ_ID CARD_ID VLD_MIN
------ ------- --------- --------- --------- --------- --------- --------- --------- -------------------- ----- -------- ----- ------- -------
01 1 08:00 08:00 08:00 08:00 08:00 08:00 08:00 上班 1 2 T T 30
01 2 12:00 12:00 12:00 12:00 12:00 12:00 12:00 用餐出 2 2 T T 30
01 3 14:00 14:00 14:00 14:00 14:00 14:00 14:00 用餐進 1 2 T T 30
01 4 18:00 18:00 18:00 18:00 18:00 18:00 18:00 下班出 2 2 T T 30
01 5 19:00 19:00 19:00 19:00 19:00 19:00 19:00 加班入 3 2 T T 30
01 6 06:00 06:00 06:00 06:00 06:00 06:00 06:00 加班出 4 2 T T 30
02 1 07:30 07:30 07:30 07:30 07:30 07:30 07:30 上班 1 2 T T 30
02 2 11:30 11:30 11:30 11:30 11:30 11:30 11:30 用餐出 2 2 T T 30
02 3 13:30 13:30 13:30 13:30 13:30 13:30 13:30 用餐入 1 2 T T 30
02 4 17:30 17:30 17:30 17:30 17:30 17:30 17:30 下班 2 2 T T 30
02 5 18:30 18:30 18:30 18:30 18:30 18:30 18:30 加班入 3 2 T T 30
02 6 07:00 07:00 07:00 07:00 07:00 07:00 07:00 加班出 4 2 T T 30


又有一个数据库每天对每一员工有一实登的基数表(TF_JBTZ)的內容如下:
YG_NO varchar(20)->为工号;SZ_NO varchar(4)->班别;TRS_DD datetime ->为打卡日期;
QTY numeric(28,8) 基数; CHK_ID varchar(1)->审核否
YG_NO SZ_NO TRS_DD QTY CHK_ID
------------------------------------------------------------------
... ... .............. .... ..
A0020022005-10-07 00:00:00.000 4.00000000N
A0020022005-10-08 00:00:00.000 2.00000000Y
A0020022005-10-09 00:00:00.000 3.00000000N
A0020022005-10-10 00:00:00.000 7.00000000N
... ... .............. .... ..

表(TF_KQ)和表(TF_JBTZ)的两个表通过 (YG_NO,TRS_DD)来关联;而表(TF_KQ)与表(tf_ban)通过BAN_NO来关联;



对考勤表(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 BAN_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(基数)


上面的问题我只算到了(TF_KQ)这个表的考勤表:
而实际上上还有忘记打卡而要补卡的一个表的动作;
如补卡了也要算是打卡的了,就要算到考勤里面去;
补卡表(tf_sktz)

YG_NO 员工代号 varchar(20)
TRS_DD 补卡时间 datetime
CHK_ID 审核否()varchar(1)--->为Y是代表审核了,当为N代表没有审核;

YG_NO TRS_DD CHK_ID
A0022005-07-08 14:00:00.000Y
A0022005-07-08 18:00:00.000Y
A0022005-07-08 19:00:00.000Y
A0022005-07-09 08:00:00.000Y
A0022005-07-09 12:00:00.000Y
A0022005-07-09 14:00:00.000Y
A0022005-07-09 18:00:00.000Y
A0022005-07-09 19:00:00.000Y
A0022005-07-10 00:00:00.000Y
A0022005-07-10 08:00:00.000Y
。。。。。

...全文
234 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
winternet 2005-09-23
  • 打赏
  • 举报
回复
mark
BarryW 2005-09-23
  • 打赏
  • 举报
回复
希望有时间能帮我看一下,谢谢大家了
子陌红尘 2005-09-22
  • 打赏
  • 举报
回复
Mark一下,等有时间了来处理。
lisiyong 2005-09-22
  • 打赏
  • 举报
回复
有点复杂.
zxbyhcsdn 2005-09-22
  • 打赏
  • 举报
回复
楼主呀!!你的问题的确是难于描述,和难以理解!!
要是能Face to Face 就好了!!
wgsasd311 2005-09-21
  • 打赏
  • 举报
回复
楼上的,请注意下,不要老是发这种垃圾.
BarryW 2005-09-21
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/4216/4216327.xml?temp=.5961878
http://community.csdn.net/Expert/topic/4202/4202774.xml?temp=.1682093
这是两个前面的贴
wangyongli 2005-09-21
  • 打赏
  • 举报
回复
明天再来看
BarryW 2005-09-21
  • 打赏
  • 举报
回复
没有把上面排班加进去了,这是一个很大的问题

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧