sql-server-2008 – SQL – 尝试迭代分区以查找重复项

所以这里有一些示例信息:

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

正如您所看到的,公司3,4和5使其成为结果,因为他们三个都有匹配的ID号和匹配的电话号码.公司11,12和13制作了它们的分区,因为它们具有匹配的ID号.公司10没有被拉,因为它的ID号不同于11,12和13.

我需要做的是让代码迭代每个分区(按电话号码分区)并检查分区中每行的ID号与分区中的其他行.最终结果将只是在其分区中的其他位置重复ID号的行.

如果您需要任何其他信息,请告诉我们.

最佳答案 这个怎么样?

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
点赞