En supprimant les doublons (basé sur les valeurs de plusieurs colonnes) de la table SQL

J'ai suivantes table 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) forme d'une clé primaire de cette table.

Si vous remarquez des 3 premières lignes appartiennent à un même client (Test à la Clientèle), qui a différents ShipToCodes: 1, 2 et 3. Similaires est le cas avec le deuxième client (ARACODE Client). Chaque Client Normal et Normal à la Clientèle-2 a seulement 1 enregistrement avec une seule ShipToCode.

Maintenant, je voudrais obtenir un résultat de l'interrogation sur cette table, où je vais avoir 1 seul enregistrement par le client. Donc, pour tout client, où il y a plus de 1 enregistrements, je tiens à garder l'enregistrement avec la valeur la plus élevée pour ShipToCode.

J'ai essayé plusieurs choses:

(1), je peux facilement obtenir la liste des clients avec un seul enregistrement dans la table.

(2) Avec la requête suivante, je suis en mesure d'obtenir la liste de tous les clients, qui ont plus d'un enregistrement dans la table.

[Requête 1]

SELECT ARDivisionNo, CustomerNo
FROM AR_Customer_ShipTo 
GROUP BY ARDivisionNo, CustomerNo
HAVING COUNT(*) > 1;

(3) Maintenant, afin de choisir la bonne ShipToCode pour chaque enregistrement retourné par la requête ci-dessus, je ne suis pas en mesure de comprendre, comment parcourir tous les enregistrements renvoyés par la requête ci-dessus.

Si je fais quelque chose comme:

[Requête-2]

SELECT TOP 1 ARDivisionNo, CustomerNo, CustomerName, ShipToCode  
FROM AR_Customer_ShipTo 
WHERE ARDivisionNo = '00' and CustomerNo = '1234567'
ORDER BY ShipToCode DESC

Alors je peut obtenir l'enregistrement approprié pour (00-1234567-Test à la Clientèle). Donc, si je peux utiliser tous les résultats de la requête-1 dans la requête ci-dessus (requête-2), alors je peux obtenir les enregistrements unique pour les clients avec plus d'un enregistrement. Ceci peut être combiné avec des résultats à partir du point (1) pour obtenir le résultat final souhaité.

Encore une fois, cela peut être plus facile que l'approche que je suis. S'il vous plaît laissez-moi savoir comment je peux faire cela.

[Note: je dois faire cela à l'aide de requêtes SQL. Je ne peux pas utiliser des procédures stockées, des que je vais pour l'exécution de cette chose, enfin, à l'aide de "Scribe Insight", qui ne me permet d'écrire des requêtes.]

OriginalL'auteur Vikram | 2015-05-14