3

は私が重複する値は、以下のオブジェクト・テーブル・ショーから緑色で強調表示を選択する必要があり、重複する値ではない存在、個別使用して選択します。私は以下のコードの異なる組み合わせを試してみた Object table SQLは:CTE、連合

。しかし、2つの重複行を返すことはできません。

;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); 

答えて

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 

戻り

enter image description here

、あなたはDELETE以下

+0

これは最初の行の重複のセット。 –

+1

@MartinSmith 2番目の二重引用符のみがハイライトされます –

+0

うんざりです。 –

1

で最終Select *を交換することにより、これらのレコードを削除することができます最初のコードの正しい版です答え

;With cte as (
     Select * 
       ,RN = Row_Number() over (Partition By ID, [Object ID] Order by (Select NULL)) 
     From tblObject 
    ) 

    Select * 
    From cte 
    Where RN>1; 
+0

よくできました! +1将来のヒント。サンプルデータを、画像ではなくコピーして貼り付けることができるテキストとして投稿すると、より役に立ちます。このようにして、適切なフィールド名や構文をSQLでテストできます。 –