为数据集中存在的所有不同column2值填写缺少的column1值

问题描述 投票:0回答:1

表t如下所示:

+-----+------+-------+
| key | week | value |
+-----+------+-------+
|   1 |    1 |    10 |
|   1 |    2 |    20 |
|   2 |    1 |   100 |
|   2 |    2 |   200 |
|   2 |    3 |   300 |
+-----+------+-------+

key 2为value 1,2和3提供week,但key 1只有value用于week 1和2

如何编写查询以添加key 1的行和缺少week 3的缺省value为0,以便结果表如下所示:

+-----+------+-------+
| key | week | value |
+-----+------+-------+
|   1 |    1 |    10 |
|   1 |    2 |    20 |
|   1 |    3 |     0 |
|   2 |    1 |   100 |
|   2 |    2 |   200 |
|   2 |    3 |   300 |
+-----+------+-------+

我尝试了交叉连接和完全外连接(在不同的周列表中),但不知何故无法达到所需的解决方案

sql postgresql
1个回答
0
投票

使用cross join生成所有行,然后使用left join来生成值:

select k.key, w.week, coalesce(t.value, 0) as value
from (select distinct key from t) k cross join
     (select distinct week from t) w left join
     t
     on t.key = k.key and t.week = w.week
order by k.key, w.week;

这使用原始表作为键和周的来源。如果您有其他包含此信息的表,则可以使用该表。

© www.soinside.com 2019 - 2024. All rights reserved.