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