如何在同一张表中将相似的记录合并为单行(SQL)?

9
我正在尝试清理一个曾被前任员工创建的邮件订阅者数据库。我已经能够整合和修复大多数问题(主要是重复),但是有些订户由于订阅了多个地区而具有重复记录。我想要做的是将这些重复记录合并为一个。
以下是一个需要合并的重复记录的实际例子(已经过涂黑处理):
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

我想将这两个记录合并成一个,并删除所有重复项(有些有多达9个重复项),就像这样:
id     first     last    address    truck    machinery    gl    ne    nw
------------------------------------------------------------------------
1      Chuck     G....   12 Lorem   1        1            1     1     1

如果某些行在同一列中包含不同的值,例如 machinery=1,2,3,应该选择哪个值? - krokodilko
在这些情况下,它将始终只是“1”或NULL。其目的仅是定义他们是否订阅该版本。因此,如果在重复行中的该列中存在“1”,则应使用“1”。 - Noah Yamen
1个回答

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

太棒了,如此简单。使用这种选择方式,我能够创建一个新的订阅者列表,没有任何重复,并且合并了所有适当的数据。 - Noah Yamen
2
当列为文本时,您会如何处理这个问题? - Sade

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接