表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 |
+-----+------+-------+
我尝试了交叉连接和完全外连接(在不同的周列表中),但不知何故无法达到所需的解决方案
使用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;
这使用原始表作为键和周的来源。如果您有其他包含此信息的表,则可以使用该表。