在 SQL 中,当一年没有销售额时,我如何显示城市的销售额为 0。我有城市表和交易表

时间:2021-04-20 16:18:26

标签: sql sql-server

我有一个表格,其中列出了每个城市每年的总销售额,但我的表格中没有某些年份城市的销售额,我们也看不到这些信息。

现在我想准备一个结果集,表示该年所有城市的销售额,并显示值 0 的一年内没有销售额的城市

城市表

<头>
CityKey 城市
1 纽约
2 达拉斯
3 旧金山

交易表

<头>
城市 总销售额
纽约 100 2019
达拉斯 50 2019
旧金山 100 2019
纽约 222 2020

输出 - 每个城市的交易:

<头>
城市 总销售额
纽约 100 2019
达拉斯 50 2019
旧金山 100 2019
纽约 222 2020
达拉斯 0 2020
旧金山 0 2020

1 个答案:

答案 0 :(得分:2)

使用 cross join 生成所有行,然后使用 left join 引入现有数据:

select c.city, y.year, coalesce(t.total_sales, 0)
from cities c cross join
     (select distinct year from transactions) y left join
     transactions t
     on t.city = c.city and t.year = y.year;