如何找出重复的记录

时间:2011-10-17 07:14:48

标签: sql sql-server

使用Sql Server 2000

我想找出表格中的重复记录

表1

ID  Transaction Value

001 020102      10
001 020103      20
001 020102      10 (Duplicate Records)
002 020102      10
002 020103      20
002 020102      10 (Duplicate Records)
...
...

交易和价值可以针对不同的ID重复,而不是针对相同的ID ...

预期产出

重复记录是......

ID  Transaction Value  
001 020102      10 
002 020102      10 
...
...

如何查询重复记录。

需要查询帮助

4 个答案:

答案 0 :(得分:5)

您可以使用

SELECT 
  ID, Transaction, Value
FROM 
  Table1
GROUP BY 
  ID, Transaction, Value
HAVING count(ID) > 1

答案 1 :(得分:0)

Select Id, Transaction, Value, Count(id) 
from table 
group by Id, Transaction, Value
having count(id) > 1

此查询将显示ID与ID的每个条目重复的次数。如果您不需要它,只需从select子句中删除Count(Id)列即可。

答案 2 :(得分:0)

自我加入(附加PK或时间戳或......)

我可以看到人们已经提供了分组解决方案,但没有人提供自我加入解决方案。唯一的问题是你需要一些其他行描述符,每个记录应该是唯一的。无论是主键,时间戳还是其他任何内容......假设唯一列的名称为Uniq,这将是解决方案:

select distinct ID, [Transaction], Value
from Records r1
    join Records r2
    on ((r2.ID = r1.ID) and
        (r2.[Transaction] = r1.[Transaction]) and
        (r2.Value = r1.Value) and
        (r2.Uniq != r1.Uniq))

最后一个连接列可以不将每一行连接到自身,而只连接到其他重复...

要找出哪一个最适合您,您可以检查他们的执行计划并执行一些测试。

答案 3 :(得分:-1)

你可以这样做:

SELECT ID, Transaction, Value
FROM Table
GROUP BY ID, Transaction, Value
HAVING COUNT(*) > 1

要删除重复项,如果没有主键,则需要在单独的表中选择不同的值,从中删除所有内容,然后将不同的记录复制回来:

SELECT ID, Transaction, Value
INTO #tmpDeduped
FROM Table
GROUP BY ID, Transaction, Value

DELETE FROM Table

INSERT Table
SELECT * FROM #tmpDeduped