2013-07-30 47 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做到这一点特别在一个视图?

谢谢!

+0

老实说,我有点失落,我是否需要使用子查询或功能或案例声明 – user2634667

回答

2

喜欢的东西

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 

你要小心,因为如果在表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

为了避免情况下,从表1失踪名字里有没有相应的期在表2中,您可以尝试如下所示:

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 
相关问题