加入日历 table 与数据 table 并填写空白数据

Join calendar table with data table and fill in blank data

我有这样的数据集:

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

我还有一个普通日历 table,它每天都有一个日期值。

 Date 
 10/18/2020
 10/19/2020
   

我需要的是加入这两个 tables 并且每个 TopicName 在日历 table 中的每一天都有一行。如果 date/topic 没有数据,则将“Count”保留为 null

所以我想要的是:

 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 日历与 table 中可用的不同主题列表,然后将实际数据集与 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代替。

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