我有一个如下数据库

Col1    Col2
------------
0010    1111   (Delete this row)
0011    1112
0012    1111   (Keep this row)


我需要删除基于Col1在Col2中找到的重复数据行。我需要保留较旧的条目并删除较年轻的条目。在此示例中,我需要删除0010并保留0012。

到目前为止,我有这段代码,向我显示了Col2中的重复项,并显示了Col1中的唯一编号

Select *
    From [database]
    Where (Col2) in (
        Select Col2
        From [database]
        Group by Col2
        Having Count(*) > 1
    )


我并没有为下一步选择正确的Col1编号而烦恼,因此可以删除该行。

最佳答案

Declare @YourTable table (col1 varchar(25),col2 varchar(25))
Insert Into @YourTable values
('0010','1111'),
('0011','1112'),
('0012','1111')

;with cteBase as (
    Select *,RowNr=Row_Number() over (Partition By Col2 Order By Col1 Desc) from @YourTable
)
Select * From cteBase where RowNr>1
-- Delete From cteBase where RowNr>1
-- Remove Select if satisfied with results


要删除的记录

col1    col2    RowNr
0010    1111    2

10-07 19:51
查看更多