首页 > 解决方案 > 表中两列的所有组合

问题描述

我有一张这样的桌子

date        |job|score
----------------------
04-01-2020  |j1 |123
04-01-2020  |j2 |524
04-01-2020  |j3 |323
04-02-2020  |j1 |533
04-02-2020  |j2 |242
04-03-2020  |j1 |432
04-03-2020  |j2 |732
04-03-2020  |j3 |932

如果您查看表作业 j3 没有 2020 年 4 月 2 日的条目。

我正在寻找的是

date        |job|score
----------------------
04-01-2020  |j1 |123
04-01-2020  |j2 |524
04-01-2020  |j3 |323
04-02-2020  |j1 |533
04-02-2020  |j2 |242
04-02-2020  |j3 |null <---- This is what I am trying to get
04-03-2020  |j1 |432
04-03-2020  |j2 |732
04-03-2020  |j3 |932

我想要日期和工作的所有可能组合以及分数。如果分数不存在,则为空。我正在尝试一些交叉连接,但没有运气。

标签: sql

解决方案


使用 across join生成行,然后使用 aleft join引入现有值:

select d.date, j.job, t.score
from (select distinct date from t) d cross join
     (select distinct job from t) j left join
     t
     on t.date = d.date and t.job = j.job;

推荐阅读