1

言い方が悪い場合は申し訳ありませんが、頭の中で起こっているアイデアをどのように表現すればよいか 100% 明確ではありません。ここに行きます:

複数の列を持つテーブルがありますが、問題の 3 つはcontactIDprimaryID、およびAddressです。

このテーブルには、連絡先情報、名前、住所、電話番号などが含まれています。同じAddressが含まれていることを除いて、すべての点で一意の行がいくつかあります。これらの行は、基本的に他の連絡先の連絡先 (またはサブ連絡先) です。これらは、TypeNumと呼ばれる 4 番目の列と、SecondaryID を含む 2 番目のテーブルによって一意に識別されます。(この情報は実際には重要ではありませんが、これから質問したい理由を説明するのに役立つかもしれません

一部の連絡先は現在親として座っており、SecondaryID を持っている必要があります。連絡先が 3 つある場合、そのうち 2 つに 3 番目の contactID と等しい primaryID を割り当てます。どちらが primaryID を取得するかは、必ずしも気にしません。

これを行うための考えられる方法はありますか?

編集:以下にサンプル画像を追加しました。2 行目と 3 行目のprimaryIDを 1 行目のcontactIDと同じにしたいと思います。(実際には、2/3 と 2 が 3 番目の contactID を取得する限り、どちらの 2 が contactID を取得しても問題ありません)

編集:すべての重複の primaryID を重複の 1 つの contactID で更新できれば、それも機能します。

例

4

1 に答える 1

1

このクエリは、最初に を使用contactsして、同じエントリが 3 つ以上ある を見つけます。addressHAVING COUNT(*) >= 3

またcontactID、 を使用して、この一連の複製から を取得しMIN(ContactID)ます。次に、このセット内のすべての重複のそれぞれに、これcontactIDが割り当てられます。ただし、次の値をPrimaryID持つ重複を除きます。ContactIDMinContactID

UPDATE c
SET c.PrimaryID = dups.MinContactID
FROM
    Contacts c 
    JOIN (
        SELECT MIN(ContactID) AS MinContactID, Address
        FROM Contacts
        GROUP BY Address
        HAVING COUNT(*) >= 3
    ) dups ON c.Address = dups.Address AND c.ContactID <> dups.MinContactID
于 2013-01-24T15:49:44.473 に答える