それで、ここに少しのサンプル情報があります:
ROW | PHONE | ID | NAME
_________________________________________
1 000-000-0000 3 Company1
2 000-000-0000 38 Company2
1 123-456-7890 0 Company3
2 123-456-7890 0 Company4
3 123-456-7890 0 Company5
1 197-865-4329 0 Company6
2 197-865-4329 18 Company7
1 654-987-1230 74 Company8
2 654-987-1230 2 Company9
1 951-753-8462 2 Company10
2 951-753-8462 3 Company11
3 951-753-8462 3 Company12
4 951-753-8462 3 Company13
この情報は、次のコードを使用してテーブルから取得されました。
USE MyTable
GO
SELECT ROW_NUMBER() OVER (PARTITION BY AI.telephone1 ORDER BY AI.telephone1) AS Row
,AI.telephone1 AS [Main Phone #]
,AI.new_id AS [ID]
,AI.name AS [Account Name]
,AI.emailaddress1 AS [Email Address]
,AI.contactname AS [Primary Contact]
FROM AccountsInfo AI
WHERE AI.telephone1 IN (
SELECT telephone1
FROM MyDatabase.dbo.AccountsInfo AI
WHERE telephone1 != 'NULL'
AND telephone1 != '--'
GROUP BY telephone1
HAVING COUNT(*) > 1
)
ORDER BY telephone1
今やらなければならないことですが、頭を悩ませることはできません。各パーティションを繰り返し処理し、ID番号が一致する結果のみを取得します。最終的にテーブルをどのように見せたいかについては、以下を参照してください...
PHONE | ID | NAME
_________________________________________
123-456-7890 0 Company3
123-456-7890 0 Company4
123-456-7890 0 Company5
951-753-8462 3 Company11
951-753-8462 3 Company12
951-753-8462 3 Company13
ご覧のとおり、Company 3、4、および5は、3つすべてが一致するID番号と一致する電話番号を持っているため、結果に到達しました。会社11、12、および13は、ID番号が一致しているため、パーティションを作成しました。会社10は、11、12、および13とは異なるID番号を持っていたため、プルされませんでした。
私がする必要があるのは、コードが各パーティション(電話番号で区切られている)を反復処理し、パーティション内の行ごとのID番号をパーティション内の他の行と照合することです。最終的には、ID番号がパーティション内の別の場所で複製された行のみになります。
他に情報が必要な場合はお知らせください。