Я следующие таблицы SQL:Удаление повторяющихся строк (на основе значений из нескольких столбцов) из таблицы SQL
AR_Customer_ShipTo
+--------------+------------+-------------------+------------+
| ARDivisionNo | CustomerNo | CustomerName | ShipToCode |
+--------------+------------+-------------------+------------+
| 00 | 1234567 | Test Customer | 1 |
| 00 | 1234567 | Test Customer | 2 |
| 00 | 1234567 | Test Customer | 3 |
| 00 | ARACODE | ARACODE Customer | 1 |
| 00 | ARACODE | ARACODE Customer | 2 |
| 01 | CBE1EX | Normal Customer | 1 |
| 02 | ZOCDOC | Normal Customer-2 | 1 |
+--------------+------------+-------------------+------------+
(ARDivisionNo, CustomerNo,ShipToCode)
образуют первичный ключ для этой таблицы.
Если вы заметили, что первые 3 строки принадлежат одному клиенту (Test Customer), у которого разные ShipToCodes: 1, 2 и 3. Аналогично в случае второго клиента (клиент ARACODE). Каждый нормальный клиент и обычный клиент-2 имеет только 1 запись с одним ShipToCode
.
Теперь я хотел бы получить запрос результатов в этой таблице, где у меня будет только 1 запись на одного клиента. Таким образом, для любого клиента, где есть более 1 записи, я хотел бы сохранить рекорд с наибольшим значением для ShipToCode
.
Я пробовал различные вещи:
(1) можно легко получить список клиентов только один записи в таблице.
(2) Следующим запросом я могу получить список всех клиентов, у которых в таблице имеется более одной записи.
[Запрос-1]
SELECT ARDivisionNo, CustomerNo
FROM AR_Customer_ShipTo
GROUP BY ARDivisionNo, CustomerNo
HAVING COUNT(*) > 1;
(3) Теперь, для того, чтобы выбрать правильный ShipToCode
для каждой записи, возвращаемой выше запроса, я не в состоянии выяснить, как перебрать все записи, возвращенные вышеуказанным запросом.
Если я что-то вроде:
[Запрос-2]
SELECT TOP 1 ARDivisionNo, CustomerNo, CustomerName, ShipToCode
FROM AR_Customer_ShipTo
WHERE ARDivisionNo = '00' and CustomerNo = '1234567'
ORDER BY ShipToCode DESC
Тогда я могу получить соответствующую запись для (00-1234567-Test Заказчик). Следовательно, если я могу использовать все результаты запроса-1 в вышеуказанном запросе (запрос-2), тогда я могу получить желаемые отдельные записи для клиентов с более чем одной записью. Это можно объединить с результатами из пункта (1) для достижения желаемого конечного результата.
Опять же, это может быть проще, чем подход, за которым я следую. Пожалуйста, дайте мне знать, как я могу это сделать.
[Примечание: Я должен сделать это, используя только SQL-запросы. Я не могу использовать хранимые процедуры, так как я собираюсь выполнить эту вещь, наконец, используя «Scribe Insight», что позволяет мне писать запросы.]
Возможный дубликат [Как удалить повторяющиеся строки в sql-сервере?] (Http://stackoverflow.com/questions/18390574/how-to-delete-duplicate-rows-in-sql-server) –