2014-06-16 4 views
-1

확인 나는 내 시간 출석 데이터베이스에서 다음 표를 더가 없다는 가정하에 각 행MS SQL 서버 2005 : 출석 (시간 교대 근무) 아웃/시간

 
ID_Emp FullName DateCheck TimeIO 
11 RONA 11/05/2014 8:16 
11 RONA 11/05/2014 13:35 
11 RONA 11/05/2014 17:23 
11 RONA 11/05/2014 21:09 
12 Elizabe 11/05/2014 14:06 
12 Elizabe 11/05/2014 22:39 
13 Jimmy 11/05/2014 8:00 
13 Jimmy 11/05/2014 12:00 

OUTPUT

 
ID_Emp FullName DateCheck TimeIn TimeOut Hours 
11 RONA 11/05/2014 8:16 13:35 5:19 
11 RONA 11/05/2014 17:23 21:09 3:46 
12 Elizabe 11/05/2014 14:06 22:39 8:33 
13 Jimmy 11/05/2014 8:00 17:12 9:12     
+2

왜 완전히 관련없는 스택 Exchange 사이트로 크로스 게시 했습니까? http://meta.stackexchange.com/questions/234081/ms-sql-server-2005-checking-time-in-out-attendance-time-shift-work – JonW

답변

0

이 당신이 Rank() over (Partition을 사용하여 tablevariable 을 사용하여 순위를 매기거나 유혹 할 필요가있는 링크를 얻으려면 (t1.Ranking & 1) = 1

Declare @tab table (ID_EMP int,FullName varchar(50),dateCheck datetime,TimeIO datetime) 
insert into @tab 
select 11, 'RONA', '11/05/2014', '8:16' 
UNION 
select 11, 'RONA' ,'11/05/2014','13:35' 
UNION 
select 11, 'RONA' ,'11/05/2014','17:23' 
UNION 
select 11, 'RONA' ,'11/05/2014','21:09' 
UNION 
select 12, 'Elizabe' ,'11/05/2014','14:06' 
UNION 
select 12, 'Elizabe' ,'11/05/2014','22:39' 
UNION 
select 13, 'Jimmy' ,'11/05/2014','8:00' 
UNION 
select 13, 'Jimmy' ,'11/05/2014','12:00' 

Declare @tab2 table (ID_EMP int,FullName varchar(50),dateCheck datetime,TimeIO datetime,Ranking int) 

Insert into @tab2 
Select *, Rank() over (Partition by ID_EMP,dateCheck order by TimeIO) as Ranking 
from @tab 


Select t1.ID_EMP,t1.FullName,t1.DateCheck,t1.TimeIO as TimeIn ,t2.TimeIO as TimeOut 
from @tab2 t1 
Join @tab2 t2 on t1.ID_EMP=t2.ID_EMP and t1.DateCheck=t2.DateCheck and t1.Ranking=t2.Ranking -1 
where (t1.Ranking & 1) = 1 
+0

답변 해 주셔서 감사합니다. – user3744135

+0

테스트 용 웹 사이트 http :// /sqlfiddle.com 하지만 오류 – user3744135

+0

@ user3744135 http://sqlfiddle.com/#!3/d41d8/35623 – bummi