2011-07-13 31 views
2

可以说我有两个表是这样的:查询帮助 - 连接与子集两个表基于列的值

People 

Id Name  FirstDate LastDate 
-- -------- --------- -------- 
A1 Bob  1/1/2007 5/6/2007 
A2 Joe  1/4/2008 9/1/2008 
.. ..   ...  ... 

PiesBaked 

Name  Date  Value 
-------- ----  ----- 
Bob   1/1/2007 7 
Bob   1/2/2007 9 
..   ...  ... 
Joe   ...  ... 

我怎样才能构建一个子集PiesBaked到第一/最后日期为名称的视图

Result 

Id Name Date  Value 
-- ---- ----  ----- 
A1 Bob  1/1/2007 7 
A1 Bob  1/2/2007 9 
.. ..  ...  ... 
A1 Bob  5/6/2007 ... 
.. ...  ...  ... 
+0

你能解释这些是如何相关的?是第一个 - 最后一个日期的时间? – Jacob

+0

你可以扩展你想要的结果吗?你期望在2007年1月1日和5/6/2007之间有什么期望? 5/6/2007的价值是什么? –

+0

我希望“名称”不是外键。 – Narnian

回答

3

试试这个:

SELECT a.Id, a.Name, b.Date, b.Value 
    FROM People a INNER JOIN PiesBaked b 
    ON a.Name = b.Name 
    AND b.Date BETWEEN a.FirstDate AND a.LastDate 
+0

值在'b'中,而不是'a'。 – Jacob

+0

@cularis:Thx。修正了错字。 – Chandu

+0

和我一样的解决方案:),但我想你应该排序结果 –

3
select p.id, p.name, pb.Date, pb.value 
    from people p 
inner join piesBaked pb 
     on pb.name = p.name 
     and pb.date between p.firstDate and p.lastDate 
order by p.id, pb.Date 
+0

+1感谢您的帮助! – SFun28