2016-05-13 4 views
0

У меня есть таблица и вам нужно удалить целую строку, где идентификатор - второй и последующий раз, но оставьте первое вхождение suCustomerIDBy способом. В таблице M есть идентификатор, который является первичным ключом и CustometID, который дублируется. Поэтому мне нужно удалить все строки с дублированным CustomerID.Удалить идентификаторы, повторяющиеся более одного раза, но оставьте первое вхождение

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

Код выше удалит все идентификатор, включая первое вхождение каждого из идентификаторов, но мне нужно, чтобы держать их первое появление. Пожалуйста, порекомендуйте.

+1

Do у вас есть другой столбец, который уникален? –

+0

Откуда вы знаете, какая из них является первой? – Malk

+0

Да, есть строка_ид, которая является базовым ключом – enigma6205

ответ

0

Этот код должен предоставить вам то, что вам нужно.

Там могут быть лучшие способы сделать это, если вы можете предоставить полную схему таблицы для Table1

Если вы получить номер строки, а затем просто игнорируют первые из них:

;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_ он отвечает , вопрос значительно улучшит его долгосрочное значение . Пожалуйста, отредактируйте свой ответ, чтобы добавить какое-то объяснение. –

Смежные вопросы