代码之家  ›  专栏  ›  技术社区  ›  Simon Breton

使用基于其他列ID的值填充部分空列

  •  0
  • Simon Breton  · 技术社区  · 7 年前

    我不确定我的头衔是否清楚。很抱歉。我有下表:

    ID           ref.    dummy_metrics dummy_dimensions
    6091039909   A       123           foo
    5914111836   B       456           bar
    6538463041   C       789           foobar
    6018474808   D       1010          bar
    6091039909                         foo
    6091039909                         foo
    6538463041                         foobar
    6538463041                         foobar
    6538463041                         foobar
    

    如你所见,我桌上有些地方是空的。我想让你知道 ref. 列中总是填充一些内容。我希望这个值基于 ID<>ref. 密钥对组合。

    下面是我的预期输出:

    ID           ref.    dummy_metrics dummy_dimensions
    6091039909   A       123           foo
    5914111836   B       456           bar
    6538463041   C       789           foobar
    6018474808   D       1010          bar
    6091039909   A                     foo
    6091039909   A                     foo
    6538463041   C                     foobar
    6538463041   C                     foobar
    6538463041   C                     foobar
    

    我不想像使用 CASE 公式。我想为每一个 ID参考号 我可以在我的桌子上找到钥匙对组合。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Gordon Linoff    7 年前

    下面是一个非常简单的方法:

    select t.*,
           coalesce(t.ref,
                    max(t.ref) over (partition by dummy_dimensions),
                    max(t.ref) over ()
                   ) as imputed_ref
    

    这将使用窗口函数来填充缺少的值。注意,有两个层次的插补——一个基于 dummy_dimensions 另一个基于整个表(如果 ref 价值观是全部 NULL )

        2
  •  0
  •   Yogesh Sharma    7 年前

    你可以用 相关 子查询:

    select ID, 
          coalesce(ref,  (select ref 
                          from table t1
                          where t1.ID = t.ID
                          )
                  ) as ref, 
           dummy_metrics, dummy_dimensions
    from table t;