2012-12-20 24 views
4

所以这里有一个位的样本信息:SQL - 试图通过分区遍历查找重复

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 

我需要什么:

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 

这一信息是从表中使用下面的代码拉现在要做,但不能包裹我的头,遍历每个分区,并只提取匹配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号重复的行。

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

回答

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 
+0

这看起来像它做到了!万分感谢! 我们得到了2万多个结果(这很好),所以我会报告回来,如果我调整了它。 –