我有一个与下面类似的表格。
我正在尝试选择行不是重复的数据。例如,行ID 1和2是彼此重复的,因为PersonID和Location相同。在这种情况下,我只想选择这些行之一。但是,对于第4行和第5行,我希望两者都返回,因为位置不同。我该怎么办?
答案 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;