请教考勤排班的实现语句,高分感谢!!!

wendyfwh 2003-08-31 09:56:52
我做的一个考勤与门禁系统:
1.人员上班时间的对应,是不是要做成一个数组的形式存储一个人一天对应的排班的上下班时间,然后用一个人的考勤记录表中的记录去对照它,然后得到这个人一天的出勤情况?(比如说迟到、早退等)该如何实现之??????
2.对一个人考勤流水记录表的各条时间记录,如何一一判定是不是有效时间??????
十万火急!!!尽快结贴!!!
...全文
142 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wendyfwh 2003-09-08
  • 打赏
  • 举报
回复
我要得到的结果如下,用vb.net为实现。
用户编号 刷卡日期 迟到次数 迟到时间 早退次数 早退时间 刷卡次数
2001001 2003-08-24 0 “ ” 0 “ ” 8
如果表中有迟到的时间,要记录。我这里没有特殊表示出来。
wendyfwh 2003-09-08
  • 打赏
  • 举报
回复
、人员排班表(PeopleShift)
字段中文名 字段名 类型 关键字段 关联表/视图名 备注
用户编号 UserNo Char8 主 用户基本信息表(UserInfo)
班次编号 ShiftNo Char2 班次信息表(ShiftInfo)
是否有效 IfValidate Boolean
排班开始时间 ArrangeTime Char19 次
开始班次类型名称 BeginShiftTypeName Char10 用于轮班人员
wendyfwh 2003-09-08
  • 打赏
  • 举报
回复
有的啊。一个用户对应一个班次啊。
eastpond 2003-09-08
  • 打赏
  • 举报
回复
我怎么看不懂呀,班次信息表跟用户编号没有关系吗?
wendyfwh 2003-09-08
  • 打赏
  • 举报
回复
有在线的高手吗?我考勤判断取出迟到的时间值为什么总不成功?

wendyfwh 2003-09-03
  • 打赏
  • 举报
回复
谢谢各位的关注!
我的表结构不象zjcxc(邹建)说得那样设计的。见以下:
我的班次信息表如下:
班次编号 ShiftNo
班次名称 ShiftName
班次类型编号 ShiftTypeNo
班次类型名称 ShiftTypeName
开始时间 StartTime
结束时间 EndTime
ShiftNo ShiftName ShiftTypeNo ShiftTypeName StartTime EndTime
1 白班 1 上午班 08:00:00 12:00:00
1 白班 2 下午班 14:00:00 18:00:00
2 三班倒 1 早班 00:00:00 08:00:00
2 三班倒 2 中班 08:00:00 16:00:00
2 三班倒 3 晚班 16:00:00 00:00:00
3 上课 1 1-2节 08:00:00 09:50:00
3 上课 2 3-4节 10:10:00 12:00:00
......

考勤流水表如下:
读卡机编号 CardReaderNo
流水号 SerialNo
用户编号 UserNo
刷卡日期 ReadDate
刷卡时间 ReadTime
统计标志 IsStatistics
CardReaderNo SerialNo UserNo ReadDate ReadTime IsStatistics
1 1 2001001 2003-08-24 07:55:00 0
1 2 2001001 2003-08-24 07:58:00 0
1 17 2001001 2003-08-24 11:50:26 0
1 18 2001001 2003-08-24 12:00:24 0
1 19 2001001 2003-08-24 13:20:00 0
1 20 2001001 2003-08-24 14:00:00 0
1 21 2001001 2003-08-24 17:55:00 0
1 22 2001001 2003-08-24 18:30:00 0
1。我要从班次信息表中得到某人的班次与上下班时间,因为要与考勤流水表中的记录作比较,怎么获取的班次时间信息以及如何处理?
2。得到流水记录后要把统计过的记录记为true(IsStatistic),把得到的相关上下班的记录存储到一个临时表中去,我用相邻的两个时间配对语句得到的很繁,求一个更为优化与简便的方法?
急盼!!!
wendyfwh 2003-09-02
  • 打赏
  • 举报
回复
没有再具体一点了的吗?
zjcxc 2003-09-02
  • 打赏
  • 举报
回复
以前回答的一个问题,希望对你有用.

/*
考勤数据统计

处理原则,根据排班表得到每个项目的时间最大的一笔资料,对于加班项,要求统计出加班时数
表及字段说明:
考勤表: kqm_mstr
kqm_gh 工号
kqm_rq 日期
kqm_sj 考勤数据

排班表: tb_pbb
description 项目说明,在结果表中的列标题
time 项目的标准时间
min 为提前时间,单位为分钟,如果为 NULL,则表明为加班项
max 为推后时间,单位为分钟,如果项目为加班项,则为加班数的计算基数
*/

--建立考勤表
create table kqm_mstr(kqm_gh varchar(6),kqm_rq int,kqm_sj datetime)
insert into kqm_mstr
select '001006',20030713,'07:48'
union all select '001006',20030713,'08:15'
union all select '001006',20030713,'12:13'
union all select '001006',20030713,'12:14'
union all select '001006',20030713,'13:07'
union all select '001006',20030713,'17:31'
union all select '001006',20030713,'18:32'
union all select '001006',20030713,'22:59'
union all select '001006',20030713,'23:30'
union all select '001007',20030713,'07:55'
union all select '001007',20030713,'12:05'
union all select '001007',20030713,'13:00'
union all select '001007',20030713,'17:30'

--建立排班表
create table tb_pbb(description varchar(20)
,time datetime,min int,max int)

insert into tb_pbb
select '上午-上班','08:00',30,15
union all select '上午-下班','12:00',0,30
union all select '下午-上班','13:30',30,15
union all select '下午-下班','17:30',0,30
union all select '加班','18:30',null,30


--得到结果
declare @sql varchar(8000),@sql1 varchar(8000),@sql2 varchar(8000)
declare @desc varchar(10),@time datetime
select @sql='select a.kqm_gh as 工号,a.kqm_rq as 日期'
,@sql1='select kqm_gh,kqm_rq'
,@sql2='select kqm_gh,kqm_rq'

--生成正常上班项目的SQL语句
select @sql=@sql+',a.['+description+']'
,@sql1=@sql1+char(13)
+' ,max(case description when '''+description
+''' then kqm_sj end) as ['+description+']'
from(
select distinct description from tb_pbb
where min is not null
) a

set @sql1=@sql1+char(13)+'from('
+char(13)+' select kqm_gh ,kqm_rq ,convert(varchar(5),max(kqm_sj),108) as kqm_sj,description'
+char(13)+' from kqm_mstr a,tb_pbb b'
+char(13)+' where a.kqm_sj between dateadd(mi,-b.min,b.time) and dateadd(mi,b.max,b.time)'
+char(13)+' group by kqm_gh ,kqm_rq ,description'
+char(13)+' ) aa group by kqm_gh ,kqm_rq'

--print @sql1

--生成加班项目的SQL语句
select @sql=@sql+',b.['+description+'-上班]'
+',b.['+description+'-下班]'+',b.['+description+'统计数]'
,@sql2=@sql2
+char(13)+' ,max(case description when '''+description
+''' then time1 end) as ['+description+'-上班]'
+char(13)++' ,max(case description when '''+description
+''' then time2 end) as ['+description+'-下班]'
+char(13)++' ,max(case description when '''+description
+''' then time3 end) as ['+description+'统计数]'
from(
select distinct description from tb_pbb
where min is null
) a

set @sql2=@sql2+char(13)+'from('
+char(13)+' select kqm_gh,kqm_rq'
+char(13)+' ,convert(varchar(5),min(kqm_sj),108) as time1'
+char(13)+' ,convert(varchar(5),max(kqm_sj),108) as time2'
+char(13)+' ,datediff(mi,min(kqm_sj),max(kqm_sj))/max(b.max) as time3'
+char(13)+' ,description'
+char(13)+' from kqm_mstr a,tb_pbb b'
+char(13)+' where a.kqm_sj > b.time and b.min is null'
+char(13)+' group by kqm_gh ,kqm_rq ,description'
+char(13)+') bb group by kqm_gh ,kqm_rq'

--print @sql2
--/*
print @sql+' from ('+char(13)+@sql1+char(13)+') a full join ('+char(13)+@sql2
+char(13)+') b on a.kqm_gh=b.kqm_gh and a.kqm_rq=b.kqm_rq'
--*/
exec(@sql+' from ('+@sql1+') a full join ('+@sql2
+') b on a.kqm_gh=b.kqm_gh and a.kqm_rq=b.kqm_rq')

drop table kqm_mstr,tb_pbb
txlicenhe 2003-09-02
  • 打赏
  • 举报
回复
参考:
http://expert.csdn.net/Expert/topic/2040/2040429.xml?temp=.9144403
win98ddk 2003-09-02
  • 打赏
  • 举报
回复
select * from
txlicenhe 2003-09-01
  • 打赏
  • 举报
回复
eg:(仅供参考)

上午上始 上午上 上午上止 上午下 上午下止
下午上始 下午上 下午上止 下午下 下午下止


有效时间为
1: 时间 between (上午上始 上午上止)中的最大值
2: 时间 between (上午上始 上午上止)中的最小值
3: 时间 between (下午上始 下午上止)中的最大值
4: 时间 between (下午上始 下午上止)中的最小值


newly_ignorant 2003-09-01
  • 打赏
  • 举报
回复
人员排班表(TimeSetTab):
UserID(人员编号)、Date(日期)、StartTime(开始时间)、StopTime(终止时间)、Flag(出勤标志)

考勤流水表(LogTab):
UserID、Time(时间)

假设不存在班跨天情况(如果存在,时间上需要特别留意)
在考勤流水表中建插入触发器,具体代码略

思路:当插入时,该人员当天是否存在考勤流水,不存在则将此时间当成上班时间,跟开始时间比较,决定是否迟到,更新人员排班表的考勤标志
如果是已经存在当天考勤记录,则将它当作下班时间,然后。。。

当然,如果要求下班考勤只能一次,则只检查第二次的时间,忽略后面的考勤

22,210

社区成员

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

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