【问题标题】:Mysql merge multiple records with same id ignoring null fieldsMysql合并多个具有相同ID的记录忽略空字段
【发布时间】:2018-10-04 14:20:00
【问题描述】:

我希望将多个具有相同 ID 的记录合并为每个 ID 的一条记录。我不得不使用数据透视表从多个其他表中获取我需要的数据,并进入一个看起来像这样的临时表:

ID |Data1|Data2|Data3|Data4
1   asdf  NULL  NULL  NULL
1   NULL  blah  NULL  NULL
1   NULL  NULL  this  NULL
1   NULL  NULL  NULL  data
2   NULL  funk  NULL  NULL
2   NULL  NULL  jazz  NULL

我想找到一种方法将具有相同 ID 的所有记录合并到一个新表中的新记录中,如下所示:

ID |Data1|Data2|Data3|Data4
1   asdf  blah  this  data
2   NULL  funk  jazz  NULL

我已经查看了此处和其他网站上的多个其他类似问题,这些问题似乎正在处理字段中的数值,例如这个 (Merge multiple rows with same ID into one row)。这些都没有预期的效果。任何帮助,将不胜感激。

【问题讨论】:

    标签: mysql sql merge merging-data


    【解决方案1】:

    使用MAX()GROUP BY 子句:

    SELECT t.ID, 
           MAX(t.Data1), 
           MAX(t.Data2), 
           MAX(t.Data3), 
           MAX(t.Data4) 
    FROM table AS t
    GROUP BY t.ID;
    

    【讨论】:

    • 次要:不使用为什么要别名?
    • 谢谢,我之前尝试过这个,但是我在一些字段标题上错误地使用了别名,然后把其他所有事情都搞砸了!现在一切正常:)
    【解决方案2】:

    如果每列只有 1 个值(从您的数据样本中看起来很像),那么您可以使用聚合方法:

    SELECT t.id ,
           max(t.data1) as data1,
           max(t.data2) as data2,
           max(t.data3) as data3,
           max(t.data3) as data3
    FROM YourTable t
    GROUP BY t.id
    

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 1970-01-01
      • 2020-07-28
      • 1970-01-01
      • 2020-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多