我想删除除第一个以外的所有重复记录。
喜欢:
NAME
R
R
rajesh
YOGESH
YOGESH
现在在上面我要删除第二个" R"第二个" YOGESH"。
我只有一个列,其名称为" NAME"。
答案 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