在BigQuery中,可以使用GENERATE_ARRAY
函数和UNNEST
操作符来填补年份间的间隔,并使用CROSS JOIN
操作符来复制行。以下是一个示例解决方案的代码示例:
WITH data AS (
SELECT 2017 AS year, 'A' AS category, 100 AS value UNION ALL
SELECT 2019 AS year, 'B' AS category, 200 AS value
)
SELECT
years.year,
data.category,
data.value
FROM
(SELECT GENERATE_ARRAY(MIN(year), MAX(year)) AS year FROM data) years
CROSS JOIN
data
LEFT JOIN
UNNEST(years.year) AS year
ON
year = data.year
ORDER BY
years.year, data.category
在上面的代码中,我们使用data
CTE(通用表达式)来模拟具有年份、类别和值的原始数据。然后,我们使用GENERATE_ARRAY(MIN(year), MAX(year))
生成一个包含最小年份和最大年份之间所有年份的数组。接下来,我们使用CROSS JOIN
将此数组与原始数据进行交叉连接,这将复制原始数据的行数。最后,我们使用LEFT JOIN
和UNNEST
将生成的年份数组与原始数据进行连接,以填补年份之间的间隔。
请注意,上述代码假设原始数据中的年份是连续的,并且按照年份和类别进行排序。如果原始数据不是按照这种方式排序,您可能需要在填补间隔之前对数据进行排序。