首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

考勤统计的有关问题

2012-01-28 
考勤统计的问题表:部门员工名打卡时间班次a张三2007-1-159:201a张三2007-1-1518:302a李四2007-1-158:001a

考勤统计的问题
表:
部门       员工名       打卡时间                             班次  
a             张三           2007-1-15   9:20                 1
a             张三           2007-1-15   18:30                 2
a             李四           2007-1-15   8:00                 1
a             李四           2007-1-15   18:10                 2
b             赵五           2007-1-15   8:00                 1
b             赵五           2007-1-15   8:00                 2
……
需要得到每月份的统计:
部门       员工名       上班时间                     下班时间                     时长      
  a             张三           2007-1-15   9:20     2007-1-15   18:30     9:10
  a             李四           2007-1-15   8:20     2007-1-15   18:10     8:50
……

[解决办法]
create table #(部门 varchar(10), 员工名 varchar(10), 打卡时间 datetime, 班次 int)
insert into # select 'a ' , '张三 ' , '2007-1-15 9:20 ' , 1
union all select 'a ' , '张三 ', '2007-1-15 18:30 ' , 2
union all select 'a ' , '李四 ', '2007-1-15 8:00 ' , 1
union all select 'a ' , '李四 ' , '2007-1-15 18:10 ' , 2
union all select 'b ' , '赵五 ' , '2007-1-15 8:00 ' , 1
union all select 'b ' , '赵五 ' , '2007-1-15 8:00 ' , 2

select 部门,员工名,上班时间=max(case when 班次=1 then 打卡时间 end),下班时间=max(case when 班次=2 then 打卡时间 end),时长=cast(datediff(hour,max(case when 班次=1 then 打卡时间 end),max(case when 班次=2 then 打卡时间 end)) as varchar)+ ': '+cast(datediff(minute,max(case when 班次=1 then 打卡时间 end),max(case when 班次=2 then 打卡时间 end)) % 60 as varchar) from # group by 部门,员工名

--
a李四2007-01-15 08:00:00.0002007-01-15 18:10:00.00010:10
a张三2007-01-15 09:20:00.0002007-01-15 18:30:00.0009:10
b赵五2007-01-15 08:00:00.0002007-01-15 08:00:00.0000:0

热点排行
Bad Request.