insert record
select 'A1459','MS','2004.04.01','0744' union
select 'A1459','MS','2004.04.01','0844' union
select 'A1459','MS','2004.04.01','1750' union
select 'A1459','MS','2004.04.02','0819' union
select 'A1459','MS','2004.04.02','1910' union
select 'A1459','MS','2004.04.03','0821' union
select 'A1459','MS','2004.04.03','1740' union
select 'A1459','MS','2004.04.04','0822' union
select 'A1459','MS','2004.04.04','1810' union
select 'A2176','LS','2004.04.01','1932' union
select 'A2176','LS','2004.04.02','0722' union
select 'A2176','LS','2004.04.02','1925' union
select 'A2176','LS','2004.04.03','0732' union
select 'A2176','LS','2004.04.04','1945' union
select 'A2176','LS','2004.04.05','0936'
select a.emp_no,
a.t_date ,
@ls_shift as shift_type,
cast(a.t_date + ' ' + @wk_st as datetime) as work_start,
case when @ov_night ='Y' then dateadd(dd,1,cast(a.t_date + ' ' + @wk_ed as datetime))
else cast(a.t_date + ' ' + @wk_ed as datetime) end work_end,
cast(a.t_date + ' ' + @st_punch as datetime) as punch_start,
cast(a.t_date + ' ' + @end_punch as datetime) as punch_end,
case when @ot_ov_night ='Y' then dateadd(dd,1,cast(a.t_date + ' ' + @st_ot as datetime))
else cast(a.t_date + ' ' + @st_ot as datetime) end st_ot,
case when @ot_ov_night ='Y' then dateadd(dd,1,cast(a.t_date + ' ' + @end_ot as datetime))
else cast(a.t_date + ' ' + @end_ot as datetime) end end_ot,
pucc_t = ( select max(CAST(r.T_date + ' ' + LEFT(r.T_time, 2) + ':' + RIGHT(T_time, 2) + ':00' AS datetime)) from record r where (r.t_date + r.emp_no ) in (select (t_date + emp_no) from record where emp_no = @emp_id and (CAST(T_date AS datetime) between @Sdate and @edate) ) and CAST(T_date + ' ' + LEFT(T_time, 2) + ':' + RIGHT(T_time, 2) + ':00' AS datetime) between cast(a.t_date + ' ' + @st_punch as datetime) and cast(a.t_date + ' ' + @end_punch as datetime) ),
ot_t = ( select max(CAST(r.T_date + ' ' + LEFT(r.T_time, 2) + ':' + RIGHT(T_time, 2) + ':00' AS datetime)) from record r where (r.t_date + r.emp_no ) in (select (t_date + emp_no) from record where emp_no = @emp_id and (CAST(T_date AS datetime) between @Sdate and @edate) ) and CAST(T_date + ' ' + LEFT(T_time, 2) + ':' + RIGHT(T_time, 2) + ':00' AS datetime) between (case when @ot_ov_night ='Y' then dateadd(dd,1,cast(a.t_date + ' ' + @st_ot as datetime))
else cast(a.t_date + ' ' + @st_ot as datetime) end) and case when @ot_ov_night ='Y' then dateadd(dd,1,cast(a.t_date + ' ' + @end_ot as datetime))
else cast(a.t_date + ' ' + @end_ot as datetime) end )
from
(select distinct emp_no, T_date from record where emp_no = @emp_id and (CAST(T_date AS datetime) between @Sdate and @edate)) a
fetch next from cur_emp into @emp_id, @ls_shift, @wk_st,
@wk_ed, @ov_night, @st_punch, @end_punch, @st_ot,
@end_ot, @ot_ov_night
end
close cur_emp
deallocate cur_emp
select * from #att_detail
drop table #att_detail
End
go
EXEC SP_GetDetail '2004-01-01','2005-01-01'
select * from record order by emp_no, t_date, t_time
DROP TABLE RECORD, emp_mst, shift_mst
drop PROCEDURE SP_GetDetail