怎么查处员工各自的下井次数

nanjg 2014-06-18 11:39:11
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


...全文
131 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
以学习为目的 2014-06-20
  • 打赏
  • 举报
回复
引用 5 楼 nanjg 的回复:
[quote=引用 4 楼 galenkeny 的回复:] [quote=引用 楼主 nanjg 的回复:] 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


if object_id('tableA') is not  null
drop table tableA
go

create  table  tableA (name VARCHAR(8),rjsj DATETIME,cjsj DATETIME)
insert tableA
SELECT '李四', '2014-01-01 08:30:00', '2014-01-01 15:20:20' UNION ALL
SELECT '李四', '2014-01-02 09:01:01', '2014-01-02 11:40:51' UNION ALL
SELECT '李四', '2014-01-03 10:01:57', '2014-01-03 15:00:01' UNION ALL
SELECT '赵五', '2014-01-01 09:50:00' ,'2014-01-01 23:00:00' UNION ALL
SELECT '陈六','','' UNION ALL
SELECT '冯八','',''


if object_id('tableB') is not  null
drop table tableB
go

create  table  tableB (name VARCHAR(8),rjsj DATETIME,cjsj DATETIME)
insert tableB

SELECT '李四', '2014-01-01 08:41:01','2014-01-01 15:01:00'UNION ALL
SELECT '李四', '2014-01-02 09:15:01', '2014-01-02 11:20:20'UNION ALL
SELECT '李四', '2014-01-03 10:11:50', '2014-01-03 14:50:01'UNION ALL
SELECT '李四', '2014-01-04 14:20:00', '2014-01-04 17:01:07'UNION ALL
SELECT '赵五', '2014-01-01 10:01:01', '2014-01-01 23:05:01'UNION ALL
SELECT '陈六','',''UNION ALL
SELECT '冯七','',''

go


select a.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 a.name
----------------
name   下井次数
陈六	0.0
冯八	0.0
李四	3.0
赵五	1.0
----------------
李四按照你的要求应该是下井次数为3次[/quote] 赵五下井 超过十个小时 应该计算下井次数为2啊 ![/quote]查询条件中的datediff(day,a.rjsj,b.rjsj)=0改下就行了
xdashewan 2014-06-18
  • 打赏
  • 举报
回复

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
nanjg 2014-06-18
  • 打赏
  • 举报
回复
引用 4 楼 galenkeny 的回复:
[quote=引用 楼主 nanjg 的回复:] 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


if object_id('tableA') is not  null
drop table tableA
go

create  table  tableA (name VARCHAR(8),rjsj DATETIME,cjsj DATETIME)
insert tableA
SELECT '李四', '2014-01-01 08:30:00', '2014-01-01 15:20:20' UNION ALL
SELECT '李四', '2014-01-02 09:01:01', '2014-01-02 11:40:51' UNION ALL
SELECT '李四', '2014-01-03 10:01:57', '2014-01-03 15:00:01' UNION ALL
SELECT '赵五', '2014-01-01 09:50:00' ,'2014-01-01 23:00:00' UNION ALL
SELECT '陈六','','' UNION ALL
SELECT '冯八','',''


if object_id('tableB') is not  null
drop table tableB
go

create  table  tableB (name VARCHAR(8),rjsj DATETIME,cjsj DATETIME)
insert tableB

SELECT '李四', '2014-01-01 08:41:01','2014-01-01 15:01:00'UNION ALL
SELECT '李四', '2014-01-02 09:15:01', '2014-01-02 11:20:20'UNION ALL
SELECT '李四', '2014-01-03 10:11:50', '2014-01-03 14:50:01'UNION ALL
SELECT '李四', '2014-01-04 14:20:00', '2014-01-04 17:01:07'UNION ALL
SELECT '赵五', '2014-01-01 10:01:01', '2014-01-01 23:05:01'UNION ALL
SELECT '陈六','',''UNION ALL
SELECT '冯七','',''

go


select a.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 a.name
----------------
name   下井次数
陈六	0.0
冯八	0.0
李四	3.0
赵五	1.0
----------------
李四按照你的要求应该是下井次数为3次[/quote] 赵五下井 超过十个小时 应该计算下井次数为2啊 !
以学习为目的 2014-06-18
  • 打赏
  • 举报
回复
引用 楼主 nanjg 的回复:
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


if object_id('tableA') is not  null
drop table tableA
go

create  table  tableA (name VARCHAR(8),rjsj DATETIME,cjsj DATETIME)
insert tableA
SELECT '李四', '2014-01-01 08:30:00', '2014-01-01 15:20:20' UNION ALL
SELECT '李四', '2014-01-02 09:01:01', '2014-01-02 11:40:51' UNION ALL
SELECT '李四', '2014-01-03 10:01:57', '2014-01-03 15:00:01' UNION ALL
SELECT '赵五', '2014-01-01 09:50:00' ,'2014-01-01 23:00:00' UNION ALL
SELECT '陈六','','' UNION ALL
SELECT '冯八','',''


if object_id('tableB') is not  null
drop table tableB
go

create  table  tableB (name VARCHAR(8),rjsj DATETIME,cjsj DATETIME)
insert tableB

SELECT '李四', '2014-01-01 08:41:01','2014-01-01 15:01:00'UNION ALL
SELECT '李四', '2014-01-02 09:15:01', '2014-01-02 11:20:20'UNION ALL
SELECT '李四', '2014-01-03 10:11:50', '2014-01-03 14:50:01'UNION ALL
SELECT '李四', '2014-01-04 14:20:00', '2014-01-04 17:01:07'UNION ALL
SELECT '赵五', '2014-01-01 10:01:01', '2014-01-01 23:05:01'UNION ALL
SELECT '陈六','',''UNION ALL
SELECT '冯七','',''

go


select a.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 a.name
----------------
name   下井次数
陈六	0.0
冯八	0.0
李四	3.0
赵五	1.0
----------------
李四按照你的要求应该是下井次数为3次
极品老土豆 2014-06-18
  • 打赏
  • 举报
回复
引用 2 楼 feiazifeiazi 的回复:
楼主,在分享吗?
同感。
飞啊子 2014-06-18
  • 打赏
  • 举报
回复
楼主,在分享吗?

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧