一个SQL语句实在不好写,我试写了一下,仅供参考!! 请假表: 请假类型,起始日期,结束日期, 卡号 出差表: 出差类型,起始日期,结束日期, 卡号 假日表: 假日名称,起始日期,结束日期 考勤表: 卡号,日期, 上班时间,下班时间,迟到,早退,旷工(float) @date 为查询的日期,@ID 为卡号 select (CASE WHEN (COUNT(*) = 0) THEN 1 ELSE 0 END) AS "矿工" from 考勤表 where 日期=@date and 卡号=@ID and (卡号 not in (select (case when(@date between 起始日期 and 结束日期) then 卡号 else 0 end) FROM 请假表) and (卡号 not in (select (case when(@date between 起始日期 and 结束日期) then 卡号 else 0 end) FROM 出差表) and (日期 not in (select (case when(@date between 起始日期 and 结束日期) then @date else 0 end) FROM 假日表)
请假表:
请假类型,起始日期,结束日期出差表:
出差类型,起始日期,结束日期假日表:
假日名称,起始日期,结束日期考勤表:
卡号,上班时间,下班时间,迟到,早退,旷工(float)
这个可不是一条两条SQL语句能搞定的基本原理就是:设置打卡时间段,如果时间段内没打卡即设置为旷工!但是要考虑无数中特殊情况1、上班打了下班没打,怎么算旷工?这算是最简单的异常
2、中间请假了(譬如8:00-12:00上班,但是9:00-11:00请假了)有的卡没打
3、跨段请假、出差(譬如8:00-12:00/14:18:00上班,10:00至次日12:00请假和出差)
4、......异常很多
没有表结构,别人怎么给你写SQL语句......
请假表:
请假类型,起始日期,结束日期, 卡号
出差表:
出差类型,起始日期,结束日期, 卡号
假日表:
假日名称,起始日期,结束日期
考勤表:
卡号,日期, 上班时间,下班时间,迟到,早退,旷工(float)
@date 为查询的日期,@ID 为卡号
select (CASE WHEN (COUNT(*) = 0) THEN 1 ELSE 0 END) AS "矿工" from 考勤表 where 日期=@date and 卡号=@ID and (卡号 not in (select (case when(@date between 起始日期 and 结束日期) then 卡号 else 0 end) FROM 请假表) and (卡号 not in (select (case when(@date between 起始日期 and 结束日期) then 卡号 else 0 end) FROM 出差表) and (日期 not in (select (case when(@date between 起始日期 and 结束日期) then @date else 0 end) FROM 假日表)
1、普通人员平时上班,如果迟到或者早退超过30分钟那就得算旷工,如果迟到31分钟,那么得有参数控制是算旷工1小时还是0.75小时还是其它,说白了就是迟到31分钟算多长时间旷工2、业务人员迟到个30分钟不算的,算正常的,也不算旷工3、晚上加班的时候迟到40分钟如果你晚走一个小时这可以不算旷工的,当然这个超出的一小时也不算加班的,如果你没有这个旷工,这算是加班的4、周末加班的时候可以计算旷工也可以不计算旷工,譬如8:00-12:00,那么9:00-12:00有的人算旷工1小时加班3小时有的人不算之计算加班3小时5、譬如没有打卡,正常下班,这个时候是算一上午旷工还是没有打卡?6、8:00-12:00上班,员工9:00-11:00请假,如果请假回来后没有打卡这个时候是算1小时上班2小时请假1小时旷工还是其它?......
关于考勤的问题相当的复杂,要想把所有企业的都考虑进取根本就不可能。当然普通写字楼上班的那他简单了,随随便便几条SQL语句即可搞定。这么多人在忽悠,楼主居然没出来......??????