加入日历 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
子查询。
我有这样的数据集:
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
子查询。