删除除SQL中的第一条记录之外的重复记录

时间:2017-09-08 13:29:49

标签: sql sql-server tsql select duplicates

我想删除除第一个以外的所有重复记录。

喜欢:

NAME
R
R
rajesh
YOGESH
YOGESH

现在在上面我要删除第二个" R"第二个" YOGESH"。

我只有一个列,其名称为" NAME"。

3 个答案:

答案 0 :(得分:6)

使用CTE(我在生产中有几个)。

;WITH duplicateRemoval as (
    SELECT 
        [name]
        ,ROW_NUMBER() OVER(PARTITION BY [name] ORDER BY [name]) ranked
    from #myTable
    ORDER BY name
)
DELETE
FROM duplicateRemoval
WHERE ranked > 1;

解释:CTE将获取所有记录并为每个唯一条目应用行号。每个附加条目将获得递增的数字。将DELETE替换为SELECT *以查看其功能。

答案 1 :(得分:3)

看起来像一个简单的distinct修饰符可以解决这个问题:

SELECT DISTINCT name
FROM   mytable

答案 2 :(得分:0)

这是更大的代码,但在您不占用原始行但找到所有重复的行的地方,它可以完美地工作

    select majorTable.RowID,majorTable.Name,majorTable.Value from 
    (select outerTable.Name, outerTable.Value, RowID, ROW_NUMBER() 
over(partition by outerTable.Name,outerTable.Value order by RowID)
     as RowNo from @Your_Table outerTable inner join
    (select Name, Value,COUNT(*) as duplicateRows  FROM @Your_Table group by Name, Value 
having COUNT(*)>1)innerTable on innerTable.Name = outerTable.Name 
    and innerTable.Value = outerTable.Value)majorTable where MajorTable.ROwNo <>1