存储过程,循环插入、合并、插入,大家帮帮忙
打卡机子
表a1
员工id ,打卡日期, 打卡时间
0001 2011-10-15 7:55
0001 2011-10-15 11:55
0001 2011-10-15 13:55
0001 2011-10-15 17:55
0001 2011-10-16 7:56
0001 2011-10-16 11:59
0001 2011-10-16 13:58
0001 2011-10-16 17:50
OA表
员工id , 日期, 上午上班时间,上午下班时间,下午上班时间,下午下班时间
0001 2011-10-15 7:55 11:55 13:55 17:55
0001 2011-10-16 7:59 11:59 13:58 17:50
如果把打卡机中的a1数据,通过sql语句或者存储过程,变成oa表里的数据?
急需!!!
[解决办法]
declare @表a1 table (员工id varchar(4),打卡日期 VARCHAR(10),打卡时间 VARCHAR(5))insert into @表a1select '0001','2011-10-15','07:55' union allselect '0001','2011-10-15','11:55' union allselect '0001','2011-10-15','13:55' union allselect '0001','2011-10-15','17:55' union allselect '0001','2011-10-16','07:56' union allselect '0001','2011-10-16','11:59' union allselect '0001','2011-10-16','13:58' union allselect '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:550001 2011-10-16 07:56 11:59 13:58 17:50*/
[解决办法]
--你可以按时间段分段处理declare @表a1 table (员工id varchar(4),打卡日期 VARCHAR(10),打卡时间 VARCHAR(5))insert into @表a1select '0001','2011-10-15','07:55' union allselect '0001','2011-10-15','11:55' union allselect '0001','2011-10-15','13:55' union allselect '0001','2011-10-15','17:55' union allselect '0001','2011-10-16','07:56' union allselect '0001','2011-10-16','11:59' union allselect '0001','2011-10-16','13:58' union ALLselect '0001','2011-10-16','17:50' UNION ALLselect '0001','2011-10-17','07:50' UNION ALLselect '0001','2011-10-18','11:50' UNION ALLselect '0001','2011-10-19','14:40' UNION ALLselect '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:550001 2011-10-16 07:56 11:59 13:58 17:500001 2011-10-17 07:50 0001 2011-10-18 11:50 0001 2011-10-19 14:40 0001 2011-10-20 19:50*/