ich folgende SQL-Tabelle haben:Entfernen von doppelten Zeilen (basierend auf Werten aus mehreren Spalten) aus SQL-Tabelle
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)
bilden einen Primärschlüssel für diese Tabelle.
Wenn Sie bemerken, dass die ersten 3 Zeilen zum selben Kunden gehören (Testkunde), der verschiedene ShipToCodes hat: 1, 2 und 3. Ähnliches ist der Fall beim zweiten Kunden (ARACODE Kunde). Jeder von Normaler Kunde und Normaler Kunde-2 hat nur einen Datensatz mit einem einzelnen ShipToCode
.
Jetzt möchte ich Ergebnis Abfrage für diese Tabelle, wo ich nur 1 Datensatz pro Kunde haben wird. Also, für jeden Kunden, wo es mehr als 1 Datensätze gibt, möchte ich den Datensatz mit dem höchsten Wert für ShipToCode
behalten.
Ich habe versucht, verschiedene Dinge:
(1) I nur ein Datensatz in der Tabelle die Liste der Kunden mit leicht zu bekommen.
(2) Mit der folgenden Abfrage kann ich die Liste aller Kunden abrufen, die mehr als einen Datensatz in der Tabelle haben.
[Abfrage-1]
SELECT ARDivisionNo, CustomerNo
FROM AR_Customer_ShipTo
GROUP BY ARDivisionNo, CustomerNo
HAVING COUNT(*) > 1;
(3) Um nun für jeden Datensatz wählen Sie die richtigen ShipToCode
von oben Abfrage zurückgegeben, ich bin, um herauszufinden, nicht in der Lage, wie durch alle iterieren die von obiger Abfrage zurückgegebenen Datensätze.
Wenn ich so etwas wie:
[Abfrage-2]
SELECT TOP 1 ARDivisionNo, CustomerNo, CustomerName, ShipToCode
FROM AR_Customer_ShipTo
WHERE ARDivisionNo = '00' and CustomerNo = '1234567'
ORDER BY ShipToCode DESC
Dann kann ich den entsprechenden Datensatz erhalten für (00-1234567-Test-Kunden). Wenn ich also alle Ergebnisse von Abfrage-1 in der obigen Abfrage (Abfrage-2) verwenden kann, kann ich die gewünschten einzelnen Datensätze für Kunden mit mehr als einem Datensatz abrufen. Dies kann mit den Ergebnissen von Punkt (1) kombiniert werden, um das gewünschte Endergebnis zu erzielen.
Auch dies kann einfacher sein als Ansatz, dem ich folge. Bitte lassen Sie mich wissen, wie ich das machen kann.
[Hinweis: Ich muss dies nur mit SQL-Abfragen tun. Ich kann keine Stored Procedures verwenden, da ich dieses Ding endlich mit 'Scribe Insight' ausführen werde, was mir nur erlaubt, Abfragen zu schreiben.]
mögliche Duplikate von [Wie doppelte Zeilen in SQL Server zu löschen?] (Http://StackOverflow.com/Questions/18390574/How-To-Delete-duplicate-rows-in-SQL-server) –