将几乎相同的行组合成1

时间:2013-06-11 10:49:45

标签: sql sql-server-2005

我有一个棘手的问题,我不介意一些帮助,我已经使用我在这里和其他地方的查询取得了一些进展,但现在我感到非常难过。

我有一个邮件列表,其中包含大量近似重复内容,我正在尝试将其合并为一个有意义的行,并采用此类数据。

Title Forename Surname  Address1      Postcode Phone    Age   Income    Ownership   Gas

Mrs   D         Andrews 122 Somewhere BH10     123456   66-70           Homeowner 
Ms    Diane     Andrews 122 Somewhere BH10     123456         £25-40                EDF

沿着

行排成一行
Title Forename Surname  Address1      Postcode Phone    Age   Income    Ownership   Gas

Mrs   Diane     Andrews 122 Somewhere BH10     123456   66-70 £25-40    Homeowner   EDF

我有超过1.27亿条记录,大多数都是以类似的模式复制的,但是当我添加一个标识字段时,没有明确的逻辑。我还有90多个专栏需要考虑,所以这有点工作! 数据没有明确的模式,所以我想我可能会有一个巨大的 case 声明来试图爬过来。

使用以下代码我只能返回全名,但是使用数据模式 - 尝试比较行中的字段如下所示。

SELECT c1.*
FROM
    Mailing c1
    JOIN
    Mailingc2 ON c1.Telephone1 = c2.Telephone1 AND c1.surname = c2.surname
WHERE
    len(c1.Forename) > len(c2.Forename)
AND c2.over_18  <> '' 
AND c1.Telephone1 = '123456'

有没有人对我应该如何进步有任何指示?我愿意接受讨论和想法......

我正在使用SQL 2005并提前道歉,如果标记到处都是!

干杯,

乔恩

1 个答案:

答案 0 :(得分:0)

假设所有姓氏和电话号码相同的人(所有人都有电话吗?)都是同一个人,会不会有用呢?

INSERT INTO newtable <fieldnames>
SELECT lastname,phone,max(field3),max(field4)....
FROM oldtable
GROUP BY lastname,phone
但是那会让约翰史密斯和杰克史密斯共同生活在一个人身上。

也许您应该考虑将其外包给某个数据输入血汗工厂,并告知您已对数据进行了预处理。 : - )

和/或准备采取错误捆绑的方式。

或许添加“为了改善我们的绿色足迹,我们已将您的地址上的x个列表合并在一起。如果您想要单独的邮件,请与我们联系”