问题描述
我有一个像这样的数据集:
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
子查询。