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

通过分组和检查非空值将多行合并为一行

  •  2
  • Nalluri  · 技术社区  · 6 年前

       [ID], [foo], [foo1], [foo2], [foo3], [foo4], [foo5]
        1,    data1,  null,    null,  null,    null,  null
        1,    null,   data2,    null,  null,    null,  null
        1,    null,  null,    data3,  null,    null,  null
        1,    null,  null,    null,  data4,    null,  null
        1,    null,  null,    null,  null,    data5,  null
        1,    null,  null,    null,  null,    null,  data6
        2,    data1,  null,    null,  null,    null,  null
        2,    null,  data2,    null,  null,    null,  null
        2,    null,  null,    data3,  null,    null,  null
        2,    null,  null,    null,  data4,    null,  null
        2,    null,  null,    null,  null,    data5,  null
        2,    null,  null,    null,  null,    null,  data6
    
    Desired Output:
       [ID], [foo], [foo1], [foo2], [foo3], [foo4], [foo5]
       1,    data1,  data2,  data3, data4,   data5,  data6
       2,    data1,  data2,  data3, data4,  data5,  data6
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Mureinik    6 年前

    聚合函数 max min null s、 您可以按ID分组并查询其他列的最大值,这将返回单个non- 此列具有的值:

    SELECT   id, MAX(foo), MAX(foo1), MAX(foo2), MAX(foo3), MAX(foo4), MAX(foo5)
    FROM     mytable
    GROUP BY id
    
        2
  •  3
  •   Gordon Linoff    6 年前

    在你的情况下,你可以使用 max() :

    select id, max(foo) as foo, max(foo1) as foo1, . . . 
    from t
    group by id;
    

    我应该注意到,原始数据结构通常是由一个有点错误的查询生成的。有时修复生成该结果的代码更容易。