日期            时间     员工
20070521 0906 朱文启  
20070521 2209 朱文启  
20070523 0909 朱文启  
20070523 2023 朱文启  
20070524 0506 朱文启  要计算员工的工作时间
采取的方法是取同一员工同一天最小的工作时间和最大的工作时间的差,很不幸的是有的员工加班超过了凌晨,这就导致了根本性的错误了。各位老大有没有解决类似问题的经验啊,赐教!

解决方案 »

  1.   

    难道真的要用游标来做么?omg!
      

  2.   

    if  (select object_id('tempdb..#temp')) is not null
    drop table #tempcreate table #temp(
    name varchar(32),
    r_date varchar(8),
    b_time varchar(4),
    e_time varchar(4)
    )declare @r_date varchar(8)
    declare @r_time varchar(4)
    declare @name varchar(32)
    declare @rowcount int
    declare @b_date varchar(8)
    declare @e_date varchar(8)
    declare @overtimelimit varchar(4)select top 1 @overtimelimit=overtimelimit,@b_date=bdate,@e_date=edate from config order by id desc
    declare view_d cursor for
    select r_date,r_time,name from Receive_Data where r_date between @b_date and @e_date  order by name ,r_date,r_timeopen view_dfetch next from view_d 
    into @r_date, @r_time, @name
    WHILE @@FETCH_STATUS = 0
    begin
      if @r_time>@overtimelimit
      begin
        select @rowcount = count(1) from #temp where name=@name and r_date = @r_date
        if @rowcount=0 
          insert #temp values (@name,@r_date,@r_time,@r_time)
        else
          update #temp set e_time = @r_time where name=@name and r_date = @r_date
      end
      else
          update #temp set e_time = @r_time where name=@name and r_date = @r_date-1
    fetch next from view_d 
    into @r_date, @r_time, @name
    end
    CLOSE view_d
    DEALLOCATE view_d
    select * from #temp