日期:2014-05-17  浏览次数:20658 次

求助,遇到难题了
table:CHECKINOUT 打卡记录表      

              USERINFO 人员明细表       

relation : 通过卡ID连接 From CHECKINOUT A Join USERINFO B On A.USERID=B.USERID
           

--希前辈修改此SQL语句把2,3倍加班的跟1.5倍加班的分别统计出来 明细及汇总,非常感谢!
   目前这条语句已经可以实现统计时间段内所有的加班时间汇总

With Cte([NAME],Wdate,MinTime,MaxTime,WofDay,Hou)
as
( --明细
  Select [Name],Convert(VarChar(10),CHECKTIME,121) [Wdate],MIN(CHECKTIME) MinTime,MAX(CHECKTIME) MaxTime,
  Datepart(dw,CHECKTIME)-1 WofDay,
  Round(Datediff(n,Case When Datepart(dw,CHECKTIME)-1<=6 Then Convert(VarChar(10),
  MIN(CHECKTIME),121)+' 17:30:00'
  Else
  Min(CHECKTIME) End,MAX(CHECKTIME))/60.0,1) Hou
    From CHECKINOUT A Join USERINFO B On A.USERID=B.USERID
   Where Convert(VarChar(10),CHECKTIME,121) Between '2012-12-01' And '2012-12-31'
   Group By [Name],Convert(VarChar(10),CHECKTIME,121),Datepart(dw,CHECKTIME)-1
  
)
Select [NAME],Right(Wdate,10) Wdate,(Case When Cast(Hou as int)=Cast((Hou+0.5) as int) Then Cast(Hou as int) Else Cast(Hou as int)+0.5 End) Hou 
From Cte Where Hou>0 Order By [NAME]

------解决方案--------------------
懒得看代码了,把结果贴出1,2行看看是什么样的。