【问题标题】:SQL how to merge similar records into single row from same table?SQL如何将同一表中的相似记录合并到单行中?
【发布时间】:2016-04-10 22:23:36
【问题描述】:

我目前正在尝试清理一个前雇员创建的邮件订阅者数据库。我已经能够整合和修复大多数问题(主要是重复问题),但我有一些订阅者的实例具有重复记录,因为他们订阅了多个区域。我想要做的就是将那些重复的记录合并到 1 中。

这是我想合并的重复记录的一个经过编辑的实际示例:

id     first     last    address    truck    machinery    gl    ne    nw
------------------------------------------------------------------------
1      Chuck     G....   12 Lorem   1                     1
2      Chuck     G....   12 Lorem            1                        1
3      Chuck     G....   12 Lorem            1                  1

我想将 2 条记录合并为 1 条记录,并像这样删除所有重复项(有些最多 9 个重复项):

id     first     last    address    truck    machinery    gl    ne    nw
------------------------------------------------------------------------
1      Chuck     G....   12 Lorem   1        1            1     1     1

【问题讨论】:

  • 如果某些行在同一列中包含不同的值,例如 machine=1,2,3 怎么办?必须选择哪个值?
  • 在这些情况下,它总是只有 '1' 或 NULL。其目的是简单地定义他们是否订阅该版本。因此,如果在重复行的任何位置该列中存在“1”,则应使用“1”。

标签: mysql sql merge records


【解决方案1】:

使用Group ByMax/Min 聚合

SELECT id, 
       first, 
       last, 
       address, 
       Max(truck)     AS truck, 
       Max(machinery) AS machinery, 
       Max(gl)        AS gl, 
       Max(ne)        AS ne, 
       Max(nw)        AS nw 
FROM   yourtable 
GROUP  BY id, 
          first, 
          last, 
          address 

【讨论】:

  • 太棒了。很简单。使用这种选择,我可以创建一个没有任何重复的新订阅者列表,并合并所有适当的数据。
  • 当列是文本时,您将如何处理?
猜你喜欢
  • 1970-01-01
  • 2012-02-20
  • 2013-09-02
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
相关资源
最近更新 更多