我有一个棘手的问题,我不介意一些帮助,我已经使用我在这里和其他地方的查询取得了一些进展,但现在我感到非常难过。
我有一个邮件列表,其中包含大量近似重复内容,我正在尝试将其合并为一个有意义的行,并采用此类数据。
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并提前道歉,如果标记到处都是!
干杯,
乔恩
答案 0 :(得分:0)
假设所有姓氏和电话号码相同的人(所有人都有电话吗?)都是同一个人,会不会有用呢?
INSERT INTO newtable <fieldnames>
SELECT lastname,phone,max(field3),max(field4)....
FROM oldtable
GROUP BY lastname,phone
但是那会让约翰史密斯和杰克史密斯共同生活在一个人身上。
也许您应该考虑将其外包给某个数据输入血汗工厂,并告知您已对数据进行了预处理。 : - )
和/或准备采取错误捆绑的方式。
或许添加“为了改善我们的绿色足迹,我们已将您的地址上的x个列表合并在一起。如果您想要单独的邮件,请与我们联系”