让我解释一下,我有一份员工名单,说明他们实际工作的时间。我有另一张桌子,给我一段时间,开始和那段时间的结束日期。我想要一个将需要一天工作的查询并找到它所处的时间段。
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 :(得分: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
你应该小心,因为如果table2中的句点重叠,你的记录可能会重复。例如,如果您的数据是:
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
答案 1 :(得分:0)
试试这个
select Table1.Name,Table2.periodNum from Table1 join Table2 on Table1.period between Table2.Begin_Period and Table2.End_Period
答案 2 :(得分:0)
为了避免在table1中没有相应句点的情况下从table1中丢失名称,您可以尝试这样的事情:
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