如果有两个决定性的列,如何通过选择删除重复项

时间:2019-11-18 14:54:10

标签: sql sql-server duplicates

我有一个与下面类似的表格。

Table Example

我正在尝试选择行不是重复的数据。例如,行ID 1和2是彼此重复的,因为PersonID和Location相同。在这种情况下,我只想选择这些行之一。但是,对于第4行和第5行,我希望两者都返回,因为位置不同。我该怎么办?

2 个答案:

答案 0 :(得分:2)

您可以使用聚合:

select min(id) as id, personid, location
from t
group by personid, location;

答案 1 :(得分:0)

您也可以为此使用CTE。
CTE允许您添加另一列来对记录进行排名;达到该排名后,您可以将其全部过滤掉,删除它们或执行其他所需的操作。

关于在类似情况下删除重复项,我已经回答了类似的问题;在此处查看答案:Remove duplicate records except the first record in SQL

在您的情况下,查询将类似于:

;WITH NoDuplicates as (
    SELECT 
         PersonID
        ,[Location]
        ,ROW_NUMBER() OVER(PARTITION BY PersonID ,[Location] ORDER BY PersonID) ranked
    FROM #myTable
)
DELETE
FROM NoDuplicates
WHERE ranked = 1;