我在弄清楚如何将以下内容组合在一起时遇到了问题:
我有一个包含大量列的sqlite表。在这些列中,一列是Name(相同的名称可以显示多次),另一列是Year。我需要检查姓名,并在每个唯一姓名处检查姓名所有行中的所有年份,查找2018年、2019年、2020年和2021年。对于当前名称不存在的这4年中的每一年,都需要使用该名称、原始行名称中的其他列值以及年份中缺少的年份向表中添加新行。其他所有值都需要留空
编辑:
下面是一个数据集示例
| Name | Year | Favorite Color|
| John | 2018 | Blue |
| John | 2019 | Blue |
| Jane | 2020 | Yellow |
| Jane | 2021 | Yellow |
以下是所需的输出:
| Name | Year | Favorite Color|
| John | 2018 | Blue |
| John | 2019 | Blue |
| John | 2020 | Blue |
| John | 2021 | Blue |
| Jane | 2018 | Yellow |
| Jane | 2019 | Yellow |
| Jane | 2020 | Yellow |
| Jane | 2021 | Yellow |
但我最终得到了更像这样的东西:
| Name | Year | Color |
| John | 2018 | Blue |
| John | 2019 | Blue |
| John | | |
| John | | |
| Jane | | |
| Jane | | |
| Jane | 2020 | Yellow |
| Jane | 2021 | Yellow |
以下是我尝试使用的代码:
INSERT INTO final (
Name,
Year,
Color
)
WITH
years (Year) AS (
SELECT DISTINCT
Year
FROM
final
),
groupings (Name) AS (
SELECT DISTINCT
Name
FROM
final
),
backbone (Year, Name) AS (
SELECT
years.Year AS Year,
groupings.Name AS Name
FROM
years
CROSS JOIN groupings
)
SELECT
backbone.Name AS Name,
backbone.Year,
final.Color
FROM
backbone
LEFT JOIN final USING (
Year, Name)
Any help is appreciated.
您可以
CROSS
将所有年份加入不同的名称/颜色组合,并LEFT
加入表格:或使用
CTE
s:请参阅demo。
如果只需要表中当前存储的年份,则可以使用递归CTE:
请参阅demo。
结果:
相关问题 更多 >
编程相关推荐