日期:2014-05-17  浏览次数:20421 次

关于考勤管理,求指点。。。
做个考勤管理,记录公司员工考勤。
我设计的考核表字段:
id  用户名  签到时间(点签到按钮的时间)  考勤状态(0.正常 1.迟到)  时间统计(迟到时间,默认是0)

简单的签到功能做好了,现在需要做个统计,如下图:


这个表格怎么生成?

表头根据本月的天数生成,下面的员工考勤要怎么弄呢?
是一个员工一个员工的查出来生成表格 还是全部查出来生成表格?
如果是全部查出来,sql语句怎么写?

分可以加,但希望回答能给我帮助。
asp.net考勤

------解决方案--------------------
每个人每一天的去刷卡记录库里去找了,找到后就计算迟到、早退时间,以及未签到(旷工)

理清楚统计流程,写语句就是麻烦点

复杂点的考勤统计要考虑的还有很多,比如:
签到的周期:比如定义有些人一周中有哪几天要签到,又如:这次元旦放假,是非正常周期的
签到的次数:比如有些公司是一天签2次、4次(我们公司行政部门就是四次)(一些2次,一些4次)
签到的时间:比如迟到、早退多久计为旷工,一星期中每天签到的时间可能不同,如:周一到五早上是8:30,周六是9:00。
考勤异常记录:比如某人请假、休息而未能签到,但不计为旷工的情况
------解决方案--------------------
根据月分生成一个 插有123...31的临时表 和你的数据进行join
------解决方案--------------------
给个简单的思路给你,往数据库里面建立一张考勤表。当签到的时候就插入数据就ok了,查询的时候:

select col1,col2,col3............. from table这样是最简单的
------解决方案--------------------
id  用户名  签到时间(点签到按钮的时间)  考勤状态(0.正常 1.迟到)  时间统计(迟到时间,默认是0)

数据库的考勤状态、时间统计可以用其它方式生成,统计的时候计算也可以,只是性能较差。

签到时间应该包含年月日时分秒吧。

假如都是用sqlserver处理的话,得到Y年X月的统计数据如下:

select UserName,UserDepName,
case day(考核表. 签到时间) when '1' then 考勤状态 else 0 end) 1
case day(考核表. 签到时间) when '2' then 考勤状态 else 0 end) 2
case day(考核表. 签到时间) when '3' then 考勤状态 else 0 end) 3
case day(考核表. 签到时间) when '4' then 考勤状态 else 0 end) 4
case day(考核表. 签到时间) when '5' then 考勤状态 else 0 end) 5
case day(考核表. 签到时间) when '6' then 考勤状态 else 0 end) 6
case day(考核表. 签到时间) when '7' then 考勤状态 else 0 end) 7
...

from User left join 部门 on User.部门ID=部门.ID
left join 考核表 on User.ID=考核表.UserID
where year(考核表. 签到时间)=Y and month(考核表. 签到时间)=X

代码太长了。。。。


------解决方案--------------------
也就是 SQL 文的  事吧 既然都存到数据库里面去了.界面这个展示,只要SQL 写的 匹配 都能出来吧。
------解决方案--------------------
你去看一下关于SQL的交叉表的用法,会给你启发的,或者笨一点的,动态把表格生成出来,每一格就是一个LABLE,把数据库里的数据一次性读出来,在内存里处理,每一格分别填写,这个相应速度也还可以接受
------解决方案--------------------
代码是其次的 你先理清你的业务逻辑 根据实际应用。
------解决方案--------------------
GridView+数据绑定
=>数据可以根据需要,在数据库中建立视图或者存储过程,按照你的需要建议用视图就行了,比如“考勤状态(0.正常 1.迟到)”,这个用SQL的case when 实现。