更新了最后的说明
我有两个表,想要以维恩图方式加入它们,以便我最终得到下面的结果集。如果表2中的日期范围中有一行,我希望覆盖金额(一旦我弄清楚如何链接这两个表,我就可以找出该部分)
表1
Client# Start Date End Date Amount Note
10 9/1/14 9/5/14 100 Something
10 9/6/14 9/30/14 200 Nothing
20 9/1/14 9/25/14 50 AnotherThing
表2
Client# Start Date End Date Amount
10 9/4/14 9/20/14 150
20 9/15/14 9/30/14 300
结果
Client# Start Date End Date Amount Note
10 9/1/14 9/3/14 100 Something
10 9/4/14 9/5/14 150 Something
10 9/6/14 9/20/14 150 Nothing
10 9/21/14 9/30/14 200 Nothing
20 9/1/14 9/14/14 50 AnotherThing
20 9/15/14 9/25/14 300 AnotherThing
我不需要记录表2中扩展日期范围的记录,而不是表1
更新澄清
如果我只做左外连接或全外连接我只得到3个结果而不是6:
出于简化目的,我将把开始日期写为SD,结束日期为ED等。
本声明
SELECT a.Client, a.SD, a.ED, a.Amount, b.SD, b.ED, b.Amount
FROM [Table 1] AS a FULL OUTER JOIN
[Table 2] as b on a.Client=b.Client
AND a.SD<=b.ED AND a.ED>=b.SD
结束以下结果
Client# a.SD a.ED a.Amount b.SD b.ED b.Amount
10 9/1/14 9/5/14 100 9/4/14 9/20/14 150
10 9/6/14 9/30/14 200 9/4/14 9/20/14 150
20 9/1/14 9/25/14 50 9/15/14 9/30/14 300
当我想象的第一步可能是:
Client# a.SD a.ED a.Amount b.SD b.ED b.Amount
10 9/1/14 9/5/14 100
10 9/1/14 9/5/14 100 9/4/14 9/20/14 150
10 9/6/14 9/30/14 200 9/4/14 9/20/14 150
10 9/6/14 9/30/14 200
20 9/1/14 9/25/14 50
20 9/1/14 9/25/14 50 9/15/14 9/30/14 300
然后最终能够将结果转换为:
Client# SD ED Amount
10 9/1/14 9/3/14 100
10 9/4/14 9/5/14 150
10 9/6/14 9/20/14 150
10 9/21/14 9/30/14 200
20 9/1/14 9/14/14 50
20 9/15/14 9/25/14 300
其中b.Amount会覆盖a.Amount(如果存在)并且我有一个唯一记录,涵盖表1中为每个客户端表示的日期范围内的所有日期。那可能吗?如果是这样,我无法理解。我希望这更加明确,如果有更多信息可以提供帮助,请告诉我。