Sql server 2008 SQL-尝试遍历分区以查找重复项
下面是一些示例信息:Sql server 2008 SQL-尝试遍历分区以查找重复项,sql-server-2008,tsql,duplicates,Sql Server 2008,Tsql,Duplicates,下面是一些示例信息: 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
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家公司都取得了成功,因为这三家公司都有匹配的身份证号码和电话号码。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
您还可以使用
having
:
select
"phone", "id"
from
"data"
group by "phone", "id"
having ( min ( "row" ) < max( "row" ));
选择
“电话”,“身份证”
从…起
“数据”
按“电话”、“id”分组
具有(最小(“行”)小于最大(“行”);
有关更多信息和可能性,请查看
看这看起来像是它干的!非常感谢!我们得到了超过20000个结果(这是很好的),所以如果我调整它,我会报告回来。