将日历表与数据表连接并填写空白数据

问题描述

我有一个像这样的数据集:

 Date               TopicName           Count
 10/18/2020          Topic 1              5
 10/19/2020          Topic 1              6
 10/19/2020          Topic 2              3 

我还有一个常规的日历表,只是每天都有一个日期值。

 Date 
 10/18/2020
 10/19/2020
   

我需要连接这两个表,并且对于每个TopicName,日历表中每天都有一行。如果该日期/主题没有数据,则将“计数”保留为空

所以我想要的是

 Date               TopicName           Count
 10/18/2020          Topic 1               5
 10/18/2020          Topic 2               null
 10/19/2020          Topic 1               6
 10/19/2020          Topic 2               3 

我尝试了左外部联接,完全外部联接,交叉联接的许多变体,但是我无法使其正常工作。 10/18主题2永远不会有争执。有什么想法吗?

谢谢!

解决方法

您可以cross join在日历中包含表中可用的不同主题的列表,然后在实际数据集中添加left join

select c.date,x.topicname,t.cnt
from calendar c
cross join (select distinct topicname from mytable) x
left join mytable t 
    on t.date = c.date and t.topicname = x.topicname

注意:count是语言关键字,我改用cnt

理想情况下,您将有一个单独的表来存储主题,您可以使用该表代替select distinct子查询。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...