同时使用左外部连接和完全外部连接

inkz8wg9  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(365)

[简化我的表格]我有一个excel模型,它根据按月汇总的客户订单输出预测。表a

+----------+--------+----------+
| Customer | Volume |   Date   |
+----------+--------+----------+
| A        |    100 | 1/1/2020 |
| B        |    100 | 1/1/2020 |
| C        |    100 | 1/1/2020 |
| A        |    100 | 2/1/2020 |
| B        |    100 | 2/1/2020 |
| C        |    100 | 2/1/2020 |
+----------+--------+----------+

我想将这些数据与来自数据库的实时数据结合起来,该数据库每月也会按第一个日期进行汇总(即,如果客户在1/5/20=1/1/1/2020订购)。表b:

+----------+--------+----------+
| Customer | Volume |   Date   |
+----------+--------+----------+
| A        |    100 | 1/1/2020 |
| A        |    100 | 1/1/2020 |
| A        |    100 | 1/1/2020 |
| B        |    100 | 2/1/2020 |
| B        |    100 | 2/1/2020 |
| Z        |    10  | 2/1/2020 |
+----------+--------+----------+

我还有第三个表,只有客户的第一个订单日期:表c:

+----------+----------+--+
| Customer |   Date   |  |
+----------+----------+--+
| A        | 1/1/2020 |  |
| B        | 1/1/2020 |  |
| C        | 1/1/2020 |  |
| Z        | 2/1/2020 |  |
+----------+----------+--+

我想比较预测(a)如何跟踪(b)中的实时数据,以及添加客户的第一个订单日期(c)。因为(b)是最细粒度的数据,所以我从这个开始。如果我对(a)和(c)进行左连接,那么表a中的一些会被切断(这是我不想要的);但是,我的表(c)数据输入正确。如果我对(a)做了一个完全的外部连接,那么我确实得到了正确的总预测,但是完全的外部连接把表(c)弄乱了。为了增加更多的复杂性,表b可能有其他不属于预测的客户,所以我也需要查看这些数据。
预测截止日期:

select 
 b.customer,
 b.volume,
 b.date,
 a.volume,
 c.date
from b
left join a on b.customer = a.customer
left join c on c.customer = b.customer

数据不正确:

select 
     b.customer,
     b.volume,
     b.date,
     a.volume,
     c.date
    from b
    full outer join a on b.customer = a.customer
    left join c on c.customer = b.customer
lfapxunr

lfapxunr1#

使用coalesce函数将表c与表a和表b的条目连接起来:

select 
     coalesce(a.customer, b.customer),
     b.volume,
     b.date,
     a.volume,
     c.date
    from b
    full outer join a on b.customer = a.customer
    left join c on c.customer = COALESCE(b.customer, a.customer)

相关问题