4

それで、ここに少しのサンプル情報があります:

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番号がパーティション内の別の場所で複製された行のみになります。

他に情報が必要な場合はお知らせください。

4

2 に答える 2

2

これはどう?

SELECT   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
INNER JOIN 
(
        SELECT telephone1,new_id
        FROM MyDatabase.dbo.AccountsInfo AI
        WHERE telephone1 != 'NULL'
            AND telephone1 != '--'
        GROUP BY telephone1, new_id
        HAVING COUNT(*) > 1
) T
ON AI.telephone1 = T.telephone1
AND AI.new_id = T.new_id
ORDER BY AI.telephone1
于 2012-12-20T15:53:03.233 に答える
0

また、使用することができますhaving

select
    "phone", "id"
from
    "data"
group by "phone", "id"
having ( min ( "row" ) < max( "row" ));

詳細と可能性については、JoeCelkoのThinkinginSetsをご覧ください。

SQL-Fiddleを参照してください

于 2012-12-22T16:40:50.520 に答える