如何在SQL Server中选择没有主键的重复记录

时间:2014-01-17 15:43:17

标签: sql sql-server duplicates

如果我运行此查询:

SELECT 
        a,
        b,
        c,
        ...
FROM    [DMS].[dbo].[CreditDebitAdjustment]

我收到24197条记录。

如果我运行此查询:

SELECT  DISTINCT
        a,
        b,
        c,
        ...
FROM    [DMS].[dbo].[CreditDebitAdjustment]

我收到了24176条记录。

如何仅选择相同的行?

2 个答案:

答案 0 :(得分:5)

SELECT 
        a,
        b,
        c
FROM    [DMS].[dbo].[CreditDebitAdjustment]
group by a,b,c
having count(*) > 1

答案 1 :(得分:1)

如果要删除这些重复项,请使用

;WITH CTE AS 
(
   SELECT 
      a, b, c,
      RowNum = ROW_NUMBER() OVER(PARTITION BY a,b,c ORDER BY ...(define how to order those rows)..)
   FROM    
      [DMS].[dbo].[CreditDebitAdjustment]
)
DELETE FROM CTE
WHERE RowNum > 1

这通过元组(a,b,c)对所有数据进行“分区”(分组),并为每一行提供一个数字 - 从每个新元组的1开始。

因此,如果您的RowNum大于1,那么这是重复的,我将其删除。

但实际上:任何严肃的数据表都应该一个合适的主键!