2016-05-13 9 views
0

私はテーブルがあり、IDが2番目以降の行をすべて削除する必要がありますが、最初のsuCustomerIDByの出現はそのままにしておきます。 Mテーブルは、主キーであるIDと、複製されるCustometIDとを有する。したがって、重複したCustomerIDを持つすべての行を削除する必要があります。IDを削除して1回以上繰り返すが、最初のオカレンスは残す

Delete From Table1 where ID IN (select ID From Table1 where count(distinct CutomerID) >=2 group by CustomerID) 

上記のコードは、各IDの最初の出現を含むすべてのIDを削除しますが、私は彼らの最初の出現を維持する必要があります。お知らせ下さい。

+1

ドゥ一意の別の列がありますか? –

+0

どの出現が最初であるかをどのように知っていますか? – Malk

+0

はい、プリミティブキーであるrow_idがあります – enigma6205

答えて

0

このコードは、必要なものを提供します。

あなたは行番号を取得した場合は表1

のための完全なテーブルスキーマを提供して、ちょうど最初のものを無視することができれば、それを行うには良い方法があるかもしれません:

;WITH cte 
AS 
(
    SELECT ID, 
    ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID) AS Rn 
    FROM [Table1] 
) 
DELETE cte WHERE Rn > 1 
+0

ありがとうございます。私はその特定の必要性に応じてそれを改善しようとします。 – enigma6205

0
delete a from(
Select dense_rank() OVER(PARTITION BY id ORDER BY id) AS Rn,* 
from Table1)a 
where a.Rn>1 
+0

このコードは質問に答えるかもしれませんが、 _why_および/または_how_に関する追加の文脈を提供します。 質問は長期的に有意に改善するでしょう あなたの答えを[編集]して、説明を加えてください。 –

関連する問題