本帖最后由 t86911384 于 2012-03-21 16:21:14 编辑

解决方案 »

  1.   

    对打卡时间按照月度汇总啊。group by 按照月汇总你该会把
      

  2.   


    还望详细说明白一点,group by 时间?人员呢?
    表的结构是这样的
    RecordID       int 记录ID
    MemberID int 成员ID
    AttendanceDate          datetime     考勤日期
    CheckInTime time    上班时间
    CheckInStatus nvarchar(100)       上班考勤状态 
    CheckOutTime time    下班时间
    CheckOutStatus nvarchar(100)       下班考勤状态 
    Re      ntext 备注
    group by 考勤日期吗?
      

  3.   

    可以统计每个人每个月考勤记录的条数
    select MemberID,COUNT(1) AS 数据条数,SUBSTRING(convert(varchar(10),AttendanceDate,23),1,7) as 考勤年月 from 考勤表 group by MemberID,SUBSTRING(convert(varchar(10),AttendanceDate,23),1,7)
      

  4.   

    select MemberID,COUNT(1) AS 数据条数,YEAR(AttendanceDate) as 考勤年 from 考勤表 group by MemberID,YEAR(AttendanceDate)这个可以统计每年的记录条数
      

  5.   

    好人就帮到底吧,还有个疑问,我的考勤状态是Int类型的,考勤状态: 0.未考勤、1.正常、2.临界、3.迟到.....
    如何分别统计他每个人每个月是以哪种形式来考勤的?你上面的统计考勤记录数,却不知他有没有违反考勤,比如:迟到早退未考勤之类的就要扣工资,大好人这怎么写?
      

  6.   

    貌似可以用,这个:
    select   MemberID,   
    count(case   checkInStatus   when   1   then   1     end   )   正常,
    count(case   checkInStatus   when   2   then   2     end   )   临界,
    count(case   checkInStatus   when   3   then   3     end   )   迟到 
    from   dk_Attendance_Records 
    group   by   MemberID
      

  7.   

    select MemberID,COUNT(1) AS 数据条数,SUBSTRING(convert(varchar(10),AttendanceDate,23),1,7) as 考勤年月,count(case checkInStatus when 0 then 1 end)  as 未考勤,count(case checkInStatus when 1 then 1 end)  as正常,
    count(case checkInStatus when 2 then 1 end ) as 临界,
    count(case checkInStatus when 3 then 1 end ) as 迟到  from 考勤表 group by MemberID,SUBSTRING(convert(varchar(10),AttendanceDate,23),1,7);
    这样写就差不多了