0

私はちょっとした助けを気にしないトリッキーな問題を抱えています。私はここや他の場所で持っているクエリを使用していくつかの進歩を遂げましたが、今は真剣に困惑しています.

私は、このようなデータを取得して、1 つの意味のある行に結合しようとしているほぼ重複する多数のメーリング リストを持っています。

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 億 2,700 万件を超えるレコードを所有しており、ほとんどが同様のパターンで複製されていますが、ID フィールドを追加したときに証明されたような明確なロジックはありません。また、検討する列が 90 を超えているため、少し手間がかかります。データには明確なパターンがないので、乗り越えようとする巨大なケースステートメントがあるのではないかと考えています。

次のコードを使用すると、完全な名前のみを返すことでまともなスタートを切ることができますが、データのパターンを使用すると、行間でフィールドを比較しようとすると次のようになります。

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 を使用しています。タグ付けがいたるところにある場合は、事前に謝罪してください。

乾杯、

ジョン

4

1 に答える 1

0

同じ姓と電話番号を持つすべての人 (すべての人が電話を持っていますか?) は同じ人であると仮定することで機能しますか?

INSERT INTO newtable <fieldnames>
SELECT lastname,phone,max(field3),max(field4)....
FROM oldtable
GROUP BY lastname,phone

しかし、それは一緒に暮らすジョン・スミスとジャック・スミスを一人の人に崩壊させてしまいます。

おそらく、データを前処理した後、どこかのデータ入力の搾取工場にアウトソーシングすることを検討する必要があります。:-)

および/または、誤ったバンドルのフラックを取る準備をしてください.

おそらく、「環境への影響を改善するために、あなたの住所にある x 個のリスティングをまとめました。別々のメールをご希望の場合は、お問い合わせください」のようなものを追加するかもしれません。

于 2013-06-11T11:09:29.713 に答える