日期:2014-05-18 浏览次数:20654 次
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 */