公司实行上下班打卡机制,打卡时间大于08:00属于迟到,少于17:00属于早退
现有两个表
员工打卡表TimeCLK有以下字段
TId   int identity,//编号
EmployeeId   varchar(20),//员工编号
DataCLK     datetime,//打卡日期
TimeCLK     varchar(20),//打卡时间
员工信息表EmployeeInfo有以下字段
EmployeeId   varchar(20),//员工编号
EName    varchar(20),//员工姓名
EDepartment   varchar(20),//员工部门
现公司想做个报表系统有以下字段必须显示
EmployeeId,EName,EDepartment,迟到次数,早退次数
现请写出查出该报表的SQL语句

解决方案 »

  1.   

    打卡时间大于08:00属于迟到,少于17:00属于早退   --这个规定有点太简单,不过当作没错吧TimeCLK     varchar(20),//打卡时间              --最好是标准格式select *,(select count(*) from TimeCLK where EmployeeId =a.EmployeeId and TimeCLK>'08:00' and TimeCLK<'12:00') as 迟到次数,
    (select count(*) from TimeCLK where EmployeeId =a.EmployeeId  and TimeCLK>'12:00' and TimeCLK<'17:00') as 早退次数
     from EmployeeInfo a
      

  2.   

    楼上的嗬嗬,居然把select 放在了那里,狠
      

  3.   

    1楼不是最好的答案try:
    select a.EmployeeId,a.EName,a.EDepartment,
    sum(case when TimeCLK>'08:00' and TimeCLK<'12:00' then 1 else 0 end) as 迟到次数,
    sum(case when TimeCLK>'12:00' and TimeCLK<'17:00' then 1 else 0 end) as 早退次数
    from EmployeeInfo a left join TimeCLK b
    on b.EmployeeId =a.EmployeeId
    group by a.EmployeeId,a.EName,a.EDepartment
      

  4.   

    这些用法原来都没用过
    高手
    看来SQL语句还有好多要学啊