#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. Спасибо, Гордон. Это был тот самый! Чемпион.