代码之家  ›  专栏  ›  技术社区  ›  Denys

为数据集中存在的所有不同列2值填写缺失的列1值

  •  0
  • Denys  · 技术社区  · 5 年前

    表t如下所示:

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

    key value 出席 week 1、2和3, 但是 钥匙 1只有 价值 1和2

    如何编写用于为添加行的查询 钥匙 1和a缺失 3违约 价值 0,因此结果表如下所示:

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

    我尝试了交叉连接和完全外部连接(在一个不同的周列表上),但不知怎么的,没有找到理想的解决方案

    1 回复  |  直到 5 年前
        1
  •  0
  •   Gordon Linoff    5 年前

    使用 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;
    

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