首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同时使用左连接和全连接

同时使用左连接和全连接
EN

Stack Overflow用户
提问于 2020-07-14 15:28:12
回答 1查看 32关注 0票数 0

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

代码语言:javascript
复制
+----------+--------+----------+
| 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/2020的订单)。表B:

代码语言:javascript
复制
+----------+--------+----------+
| 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:

代码语言:javascript
复制
+----------+----------+--+
| 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可能有不在预测中的其他客户,因此我也需要查看此数据。

预测数字截断:

代码语言:javascript
复制
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

错误的数据:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-14 15:51:07

使用coalesce函数将表C与表A和表B的条目连接起来:

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62890066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档