首页 > 解决方案 > 使用 SQL 在所有期间复制输出行

问题描述

我有一个问题,我将“用户 ID”列表加入给定季度期间的活动单位列表。话虽如此,用户经常会出现季度变化,但我希望输出仍然显示每个用户的每个季度,即使它为零。

表 A:

用户身份 用户名
000123 加里·R。
000124 简·S。
000125 玛丽·K。
000126 约翰·P。
000127 汉克 B.

表 B。

用户身份 四分之一 单位
000123 2020-Q1 6
000123 2020-Q2 819
000123 2020-Q4 21
000123 2021-Q2 39
000123 2021-Q3 394

如我们所见,用户 000123 在 2020-Q3 和 2021-Q1 季度没有任何单位,我希望输出显示单位中为 0 的季度。

我想看到的示例输出是:

用户名 四分之一 单位
加里·R。 2020-Q1 6
加里·R。 2020-Q2 819
加里·R。 2020-Q3 0
加里·R。 2020-Q4 21
加里·R。 2021-Q1 0
加里·R。 2021-Q2 39
加里·R。 2021-Q3 394

我唯一能想到的就是创建一个包含所有季度的表来加入查询,但想知道是否可以在不创建额外连接的情况下获得相同的输出。

标签: sqljoingoogle-bigqueryduplicates

解决方案


考虑以下方法

select user_name, format_date('%Y-Q%Q', q) quarter, ifnull(units, 0) units
from TableA a,
unnest(generate_date_array('2020-01-01', '2021-09-01', interval 1 quarter)) q
left join TableB b
on format_date('%Y-Q%Q', q) = quarter 
and a.user_id = b.user_id         

如果应用于您问题中的样本数据 - 输出是

在此处输入图像描述


推荐阅读