CREATE TABLE RecordInfo
(
 ID [int] IDENTITY (1, 1) NOT NULL ,
 WorkNo [char] (4) NOT NULL ,   --员工编号
 SignTime [DateTime]) NOT NULL   --Formate as :2006-5-13 12:05:23

CREATE TABLE ShiftInfo  --班次主表
(
 ShiftID IDENTITY (1, 1) NOT NULL ,          --班次序号
 ShiftName varchar(20) not NULL --班次名称
)
Insert into ShiftInfo(ShiftName) values('行政班次')  --早九晚五型的班次(ShiftID=1)               
Insert into ShiftInfo(ShiftName) values('灵活班次')  --多班倒,多班轮流班次,如三班倒(ShiftID=2),分三条明细表记录
Insert into ShiftInfo(ShiftName) values('按时计薪班次') --按实际的上班时间计工资(ShiftID=3)CREATE TABLE PersonArrange ( --员工班次划分表
 [ID] [bigint] IDENTITY (1, 1) NOT NULL ,
 [WorkNo] [char] (4) NOT NULL ,
 [ShiftID] [int] NOT NULL ,
)CREATE TABLE [dbo].[ShiftsInfo] ( --班次明细表
 [SectID] [int] IDENTITY (1, 1) NOT NULL ,
 [ShiftID] [char] (4) NOT NULL ,  --和主表关联
 [SectName] [nvarchar] (50) NOT NULL ,  --明细班段名称
 [OnDutyTime] [nvarchar] (50)  NOT NULL ,--上班时间,如 08:00
 [OnDutyBefore] [int] NOT NULL , --上班提前刷卡时间(分钟数),如30
 [OnDutyBack] [int] NOT NULL ,   --上班推后刷卡时间(分钟数),如30 (在这个范围内刷卡不算迟到)
 [OffDutyTime] [nvarchar] (50)  NOT NULL ,--下班(同上班)
 [OffDutyBefore] [int] NOT NULL ,--下班
 [OffDutyBack] [int] NOT NULL ,  --下班
 [SpanDay] [bit] NOT NULL ,      --是否跨天 0-不跨天,1-跨天
 [TimeSum] [int] NOT NULL ,      --总上班小时数
)问题:按以上各个表统计出每个员工一短时间内的
1、迟到、早退(次数,分钟数),旷工(次数);
2、实际工作小时数(可以为小数);注:员工如果是在灵活班的话,则自动根据刷卡时间来分辨其班次。 揭帖后,回答正确,每人再赠送200分!!!

解决方案 »

  1.   

    先别这么说你要的东西根本就不是一句两句能说的清楚的,因为你要的是考勤算法,根本就不是统计。怎么就算迟到,怎么算早退?8:00上班,8:00:59打卡算不算迟到?
    12:00下班,10:00打卡算早退还是旷工?
    或者更牛B一点,上午就10:00打了一次卡,这算迟到还是早退还是旷工还是没有打卡?偶原来写过这些东西,把结果得到的算法用SQL语句整整写了2000行,得用3个存储过程才算完。至于统计迟到早退,结果都得到了统计个次数出来还不简单。