Удалить повторяющиеся записи из таблицы

У меня есть таблица, как показано ниже (с использованием MS SQL Server 2008)

Contact1 Contact2 -------- --------- 1234567890 9087654321 9087654321 1234567890 1234567890 1234567890 9087654321 9087654321 8989898989 9898989898 9898989898 8989898989 

Значения Contact1 и Contact2 во 2-й строке и 5-й строке – это обменная форма значений в 1-й и 6-й строках соответственно. Также оба значения равны в 3-й и 4-й строках.

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

 Contact1 Contact2 -------- --------- 1234567890 9087654321 8989898989 9898989898 

Я начинаю работать с SQL и не собираюсь приступать к работе. Любая помощь приветствуется.

У меня есть решение от MSDN Forum

 WITH swapped_Contacts AS ( SELECT CASE WHEN Contact1 <= Contact2 THEN Contact1 ELSE Contact2 END AS Contact1 ,CASE WHEN Contact2 > Contact1 THEN Contact2 ELSE Contact1 END AS Contact2 FROM dbo.Contacts ) ,ordered_Contacts AS ( SELECT Contact1 , Contact2 , ROW_NUMBER() OVER(PARTITION BY Contact1, Contact2 ORDER BY Contact1, Contact2) AS rownum FROM swapped_Contacts ) DELETE FROM ordered_Contacts WHERE rownum > 1 DELETE Contacts FROM Contacts C1 WHERE Contact1 = Contact2 AND EXISTS (SELECT * FROM Contacts C2 WHERE C1.Contact1 IN (C2.Contact1, C2.Contact2) AND C2.Contact1 <> C2.Contact2) 

Я бы сделал это следующим образом:

  1. Переименуйте таблицу в sp_rename (используя sp_rename )
  2. Создать таблицу контактов.
  3. Вставьте записи, в которых Contact1 = Contact2 из контактов_соединяется к контактам.
  4. Удалите записи, где Contact1 = Contact2 из контактов_old
  5. Теперь у нас остались записи, где
    1. Записи контактов уникальны без какой-либо замены. Вы можете идентифицировать такие записи, выполнив LEFT INNER JOIN в той же таблице с условием JOIN как c1.Contact1 = c2.Contact2 AND c1.Contact2 = c2.Contact1 с предложением WHERE как c2.Contact1 IS NULL . После вставки в контакты вы можете удалить эти записи.
    2. Контактные столбцы меняются местами и присутствуют. Возможно, вам захочется подумать об этом сейчас, когда у вас есть на что начать.
Interesting Posts

Могу ли я создать динамический сводный запрос из таблицы значений ключей с разными типами данных?

SQL Server, пытаясь оптимизировать мой запрос, используя TOP, больше и порядок?

Результаты группировки серверов sql

Разделение значений из одного столбца в несколько столбцов в SQL с разными разделителями

SQL Server – Правила анализа схемы / кода. Какими будут ваши правила?

Используя параметр таблицы таблицы TVP, каковы некоторые из шагов, о которых стоит поговорить?

Прерывистый интервал ожидания ODBC для SQL Server

Последний день последнего месяца в SQL Server

Как динамически вычислять суммы многих столбцов в GROUP?

прерывистая проблема, возникающая с таблицей, которая используется только для выбора

Рекурсивный запрос SQL по убыванию

Как я могу получить переменную SQL из cfquery?

Насколько предсказуем NEWSEQUENTIALID?

Использование предложения GROUP BY для замены разнородных строк одним значением

используя рекурсивный CTE с SQL для группировки данных на основе условия запуска

Давайте будем гением компьютера.