Sql 检查重复数据中的重复

Sql 检查重复数据中的重复,sql,Sql,我有以下模式的学区、乡、学校代码和学校名称: District Tehsil SchCode SchName A AA 11111111 AA1 A AA 11111111 AA2 A AA 11111111 AA3 B BB 22222222 BB1 B BB 22222222 BB2 B

我有以下模式的学区、乡、学校代码和学校名称:

District Tehsil  SchCode        SchName
A          AA    11111111       AA1
A          AA    11111111       AA2
A          AA    11111111       AA3
B          BB    22222222       BB1
B          BB    22222222       BB2
B          BB    22222222       BB3
我想检查SchCode中是否有相同的SchCode分配给具有相同或不同SCNAME的任何其他学校


请建议对此进行SQL Server查询。我使用的是SQL Server 2008 Exp

您可以使用按该列分组的相关子查询进行联接:

SELECT t1.District, t1.Tehsil, t1.SchCode, t1.SchName
FROM dbo.TableName t1
INNER JOIN (SELECT SchCode 
            FROM dbo.TableName 
            GROUP BY SchCode HAVING COUNT(*) > 1) dup
ON t1.SchCode = dup.SchCode
返回所有行,因为所有行都是另一行的重复

如果您只是想知道记录是否有重复项,则可以使用以下查询:

SELECT t1.District, t1.Tehsil, t1.SchCode, t1.SchName, 
       hasDuplicate = CASE WHEN dup.SchCode IS NULL THEN 'no' ELSE 'yes' END
FROM dbo.TableName t1
LEFT OUTER JOIN (SELECT SchCode 
                 FROM dbo.TableName 
                 GROUP BY SchCode HAVING COUNT(*) > 1) dup
ON t1.SchCode = dup.SchCode
使用修改后的数据获得非重复数据

试试这个

;WITH cte AS 
(SELECT   Row_number() OVER (partition BY schcode ORDER BY schname) id,* 
 FROM     tablename ) 
SELECT * 
FROM   tablename a 
JOIN   (SELECT   id,schcode ,count(1)
        FROM     cte 
        GROUP BY id,schcode 
        HAVING   Count(1) > 1)) B 
ON     a.schcode = b.schcode 


Tim it返回所有行,我想要不同或相同学校多次出现的SchCode列表,我相信你明白我的意思。@ShahNawaz:为什么你指定副本必须有“不同或相同学校”?这没有任何意义,因为从那时起,这个专栏就不重要了,或者除了“不同”和“相同”之外,还有第三种选择吗。
SELECT * 
FROM   tablename a 
JOIN   (SELECT   schname,schcode ,count(1)
        FROM     tablename 
        GROUP BY schname,schcode 
        HAVING   Count(1) > 1)) B 
ON     a.schcode = b.schcode