维恩图基于重叠日期范围在两个表中排

时间:2014-12-02 15:34:41

标签: mysql sql sql-server

更新了最后的说明

我有两个表,想要以维恩图方式加入它们,以便我最终得到下面的结果集。如果表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中为每个客户端表示的日期范围内的所有日期。那可能吗?如果是这样,我无法理解。我希望这更加明确,如果有更多信息可以提供帮助,请告诉我。

0 个答案:

没有答案