当前位置: 代码迷 >> Sql Server >> 如何查处员工各自的下井次数
  详细解决方案

如何查处员工各自的下井次数

热度:55   发布时间:2016-04-24 10:32:52.0
怎么查处员工各自的下井次数
tableA
name rjsj(入井时间) cjsj(出井时间)
李四 2014-01-01 08:30:00 2014-01-01 15:20:20
李四 2014-01-02 09:01:01 2014-01-02 11:40:51
李四 2014-01-03 10:01:57 2014-01-03 15:00:01
赵五 2014-01-01 09:50 2014-01-01 23:00:00
陈六
冯八

tableB
name rjsj(入井时间) cjsj(出井时间)
李四 2014-01-01 08:41:01 2014-01-01 15:01:00
李四 2014-01-02 09:15:01 2014-01-02 11:20:20
李四 2014-01-03 10:11:50 2014-01-03 14:50:01
李四 2014-01-04 14:20:00 2014-01-04 17:01:07
赵五 2014-01-01 10:01:01 2014-01-01 23:05:01
陈六
冯七


下井次数计算归则:
以tableB入井时长为准 若时长大于2小时 算1次  大于8小于10算1.5次  大于10算2次
小于2小时不算。
如果某次下井(时长大于2小时)数据在tableA中不存在,则此次下井次数不计算,视为无效 。
sql2000数据库。
要求得到 

李四 4
赵五 1
陈六 0
冯七 0


求所有的下井次数的sql如下



select 
sum(case when datediff(n,b.rjsj,b.cjsj)>120 then 1
         when datediff(n,b.rjsj,b.cjsj)>480 and datediff(hour,b.rjsj,b.cjsj)<600 then 1.5
         when datediff(n,b.rjsj,b.cjsj)>600 then 2
         else 0
    end)as 下井次数
from tableA a left join tableB b
on a.name=b.name and datediff(day,a.rjsj,b.rjsj)=0



------解决方案--------------------

select 
name,
sum(case when datediff(n,b.rjsj,b.cjsj)>120 then 1
         when datediff(n,b.rjsj,b.cjsj)>480 and datediff(hour,b.rjsj,b.cjsj)<600 then 1.5
         when datediff(n,b.rjsj,b.cjsj)>600 then 2
         else 0
    end)as 下井次数
from tableA a left join tableB b
on a.name=b.name and datediff(day,a.rjsj,b.rjsj)=0
group by name

------解决方案--------------------
楼主,在分享吗?
------解决方案--------------------
引用:
楼主,在分享吗?
同感。
  相关解决方案