一段考勤的SQL,9点以后算迟到,现在需要改成9点到9点半打卡的算迟到,9点半以后的算无薪事假,在不改动数据格式的情况如何改下班这段sql,谢谢select *,[早上]=case when 最小时间>convert(varchar(10),最小时间,120)+' 09:00:00' then '迟到' else '正常' end,
[下午]=case when 最大时间<convert(varchar(10),最小时间,120)+' 17:30:00'  then '早退' else '正常' end
 from
(select a.name,a.ssn,MIN(b.checktime) AS 最小时间,MAX(b.checktime) AS 最大时间 
from userinfo a,checkinout b 
where a.ssn like 'cd%' 
and a.userid=b.userid 
and CONVERT(varchar(100), checktime, 112) between 20100601 and 20100630 
group by 
a.name,a.ssn,CONVERT(VARCHAR(8),checktime,112))a

解决方案 »

  1.   

    select *,
    [早上]=case when 最小时间 between convert(varchar(10),最小时间,120)+' 09:00:00' and
    convert(varchar(10),最小时间,120)+' 09:30:00' then '迟到' 
    when 最小时间>convert(varchar(10),最小时间,120)+' 09:30:00' then '无薪事假' 
    else '正常' end,
    [下午]=case when 最大时间<convert(varchar(10),最小时间,120)+' 17:30:00' then '早退' else '正常' end
     from
    (select a.name,a.ssn,MIN(b.checktime) AS 最小时间,MAX(b.checktime) AS 最大时间  
    from userinfo a,checkinout b  
    where a.ssn like 'cd%'  
    and a.userid=b.userid  
    and CONVERT(varchar(100), checktime, 112) between 20100601 and 20100630  
    group by  
    a.name,a.ssn,CONVERT(VARCHAR(8),checktime,112))a
      

  2.   

    同意楼上的,用CASE