SQL:使用Distinct,Not Exists,CTE,Union选择重复值

eni*_*205 3 sql-server union duplicates not-exists common-table-expression

我需要从下面的Object表中选择以绿色突出显示的重复值: 对象表

我尝试过以下代码的不同组合.但是不能返回两个重复的行.

;with CTE as
    (Select distinct ID, count([Object ID]) as [Object ID] 
from #Object 
     group by ID having count([Object ID]) > 1)

select * from CTE where 
    NOT EXISTS (Select distinct ID , count(distinct [Object ID]) as [Object ID] 
from #Object group by ID having count(distinct [Object ID]) > 1);
Run Code Online (Sandbox Code Playgroud)

Joh*_*tti 7

您可以使用窗口函数ROW_NUMBER()来标识重复的行.

Declare @YourTable table (ID int,ObjectID int,ObjectName varchar(50))
Insert into @YourTable values
(250708,321,'hotel'),
(250708,343,'mercantile'),
(250708,370,'parking'),
(250708,370,'residential condominium'),
(250708,370,'residential condominium'),
(250708,401,'residential condominium'),
(250708,401,'residential condominium')



;with cte as (
    Select *
          ,RN = Row_Number() over ( Partition By ID,ObjectID,ObjectName Order by (Select NULL))
     From  @YourTable
)
Select * 
 From cte 
 Where RN>1
Run Code Online (Sandbox Code Playgroud)

返回

在此输入图像描述

在一个侧面说明,您可以通过更换最终删除这些记录Select *DELETE