日期:2014-05-18 浏览次数:20807 次
declare @表a1 table
(
员工id varchar(4),
打卡日期 VARCHAR(10),
打卡时间 VARCHAR(5)
)
insert into @表a1
select '0001','2011-10-15','07:55' union all
select '0001','2011-10-15','11:55' union all
select '0001','2011-10-15','13:55' union all
select '0001','2011-10-15','17:55' union all
select '0001','2011-10-16','07:56' union all
select '0001','2011-10-16','11:59' union all
select '0001','2011-10-16','13:58' union all
select '0001','2011-10-16','17:50'
declare @OA表 table
(
员工id varchar(4),
日期 VARCHAR(10),
上午上班时间 VARCHAR(5),
上午下班时间 VARCHAR(5),
下午上班时间 VARCHAR(5),
下午下班时间 VARCHAR(5)
)
insert into @OA表
select 员工id,打卡日期,
max(case when rid=1 then 打卡时间 else '' end),
max(case when rid=2 then 打卡时间 else '' end),
max(case when rid=3 then 打卡时间 else '' end),
max(case when rid=4 then 打卡时间 else '' end)
from (select row_number() over (partition by 员工id,打卡日期 order by 打卡时间) as rid,* from @表a1 ) a group by 员工id,打卡日期
select * from @OA表
/*
员工id 日期 上午上班时间 上午下班时间 下午上班时间 下午下班时间
---- ---------- ------ ------ ------ ------
0001 2011-10-15 07:55 11:55 13:55 17:55
0001 2011-10-16 07:56 11:59 13:58 17:50
*/
------解决方案--------------------
--你可以按时间段分段处理
declare @表a1 table
(
员工id varchar(4),
打卡日期 VARCHAR(10),
打卡时间 VARCHAR(5)
)
insert into @表a1
select '0001','2011-10-15','07:55' union all
select '0001','2011-10-15','11:55' union all
select '0001','2011-10-15','13:55' union all
select '0001','2011-10-15','17:55' union all
select '0001','2011-10-16','07:56' union all
select '0001','2011-10-16','11:59' union all
select '0001','2011-10-16','13:58' union ALL
select '0001','2011-10-16','17:50' UNION ALL
select '0001','2011-10-17','07:50' UNION ALL
select '0001','2011-10-18','11:50' UNION ALL
select '0001','2011-10-19','14:40' UNION ALL
select '0001','2011-10-20','19:50'
declare @OA表 table
(
员工id varchar(4),
日期 VARCHAR(10),
上午上班时间 VARCHAR(5),
上午下班时间 VARCHAR(5),
下午上班时间 VARCHAR(5),
下午下班时间 VARCHAR(5)
)
insert into @OA表
select 员工id,打卡日期,
MAX(case when 打卡时间 BETWEEN '00:00' AND '09:00' THEN 打卡时间 ELSE '' END),
MAX(case when 打卡时间 BETWEEN '09:00' AND '12:00' THEN 打卡时间 ELSE '' END),
MAX(case when 打卡时间 BETWEEN '12:00' AND '16:00' THEN 打卡时间 ELSE '' END),
MAX(case when 打卡时间 BETWEEN '16:00' AND '23:00' THEN 打卡时间 ELSE '' END)
from @表a1 a group by 员工id,打卡日期
select * from @OA表
/*
员工id 日期 上午上班时间 上午下班时间 下午上班时间 下午下班时间
---- ---------- ------ ------ ------ ------
0001 2011-10-15 07:55 11:55 13:55 17:55
0001 2011-10-16 07:56 11:59 13:58 17:50
0001 2011-10-17 07:50
0001 2011-10-18 11:50
0001 2011-10-19 14:40
0001 2011-10-20 19:50
*/