2013-07-30 3 views
-4

설명하자 실제로 근무한 직원의 목록이 있습니다. 그 기간 동안 시작해서 끝내는 다른 테이블을 가지고 있습니다. 나는 날이 일을 수행하고에 빠진다하는 기간을 발견하는 쿼리를 원하는 SQL Server 두 날짜 사이에 레코드 찾기

table 1 

David 05/10/2013 
Peter 05/16/2013 

table 2 
Period_Num   Begin_Period   End_Period 
Period 1   01/05/2013  05/15/2013 
Period 2   05/16/2013  12/31/2013 

내가 마지막 읽고 싶은 :.
David  Period 1 
Peter  Period 2 

sql에서이 작업을 수행 할 수있는 방법이 있나요 특히 보기에서?

감사합니다.

select t1.Name, t2.Period_Num 
from table1 as t1 
    left outer join table2 as t2 on t1.date between t2.Begin_Period and T2.End_Period 

같은

+0

솔직히 말해서 하위 쿼리 나 함수 또는 사례 문을 사용해야하는지 여부에 대해 조금 분실했습니다. – user2634667

답변

2

뭔가 당신이 표 2 기간이 중복되는 경우, 귀하의 기록은 복제 할 수 있기 때문에주의해야합니다. 예를 들어, 데이터가있는 경우 :

table 1 

David 05/10/2013 
Peter 05/16/2013 

table 2 
Period_Num   Begin_Period   End_Period 
Period 1    01/05/2013   05/15/2013 
Period 2    05/16/2013   12/31/2013 
Period 3    03/08/2013   08/10/2013 

당신이 시도

David  Period 1 
Peter  Period 2 
David  Period 3 <- DUPLICATE 
+0

이해하고 있으며, 작성하는 것보다 훨씬 쉽습니다. 감사. 나는 테이블 2에 FK 제약을 가지고있다. 당신의주의는 일어나지 않을 것이다. 고마워. – user2634667

0

을 받게됩니다이

select Table1.Name,Table2.periodNum from Table1 join Table2 on Table1.period between Table2.Begin_Period and Table2.End_Period

0

해당하는 기간이없는 경우에는 표에서 이름 누락을 방지하기 위해 table2에서 다음과 같이해볼 수 있습니다 :

select t1.Name, isnull(t2.Period_Num,'n/a') 
from table1 t1 
left outer join table2 t2 on t1.worked between t2.Begin_Period and t2.End_Period 
관련 문제