Как найти дубликаты из столбца уникального кода и удалить строки, к которым они также присоединены, сохраняя при этом исходную строку?

#sql #tsql #azure-sql-server

#sql #tsql #azure-sql-server

Вопрос:

У меня есть таблица на моем сервере Azure sql с именем dbo.SQL_Transactional, и в ней есть столбцы с заголовками code, saledate, branchcode

код — это мой первичный ключ, поэтому, если когда-либо будет 2 или более строк с одинаковым кодом, они будут дубликатами и их необходимо удалить. Как я могу это сделать? Мне не нужно беспокоиться о том, являются ли saledate или branchcode дубликатами, потому что если код дублируется, то это все, что мне нужно, чтобы иметь возможность удалить всю дублирующуюся строку.

Ответ №1:

Если вы просто хотите удалить повторяющиеся строки, попробуйте обновляемый CTE:

 with todelete as (
      select t.*, row_number() over (partition by code order by code) as seqnum
      from t
     )
delete from todelete
    where seqnum > 1;
  

Если бы вы просто хотели выбрать одну строку, то вы бы использовали where seqnum = 1 .

Комментарии:

1. Должно ли это быть where seqnum > 1 ?

2. Спасибо, Гордон. Это был тот самый! Чемпион.