2010-06-09 4 views
2

J'ai deux tables de base SQL Server:une table de serveur SQL avec les données d'une autre table

Customer (ID [pk], AddressLine1, AddressLine2, AddressCity, AddressDistrict, AddressPostalCode) 

CustomerAddress(ID [pk], CustomerID [fk], Line1, Line2, City, District, PostalCode) 

CustomerAddress contient plusieurs adresses pour l'enregistrement client.

Pour chaque enregistrement de client, je souhaite fusionner l'enregistrement CustomerAddress le plus récent où le plus récent est déterminé par la valeur d'ID CustomerAddress la plus élevée.

J'ai actuellement obtenu les éléments suivants:

UPDATE Customer 
SET 
    AddressLine1 = CustomerAddress.Line1, 
    AddressPostalCode = CustomerAddress.PostalCode 
FROM Customer, CustomerAddress 
WHERE 
    Customer.ID = CustomerAddress.CustomerID 

qui fonctionne, mais comment puis-je faire en sorte que le plus récent (ID le plus élevé) record CustomerAddress est sélectionné pour mettre à jour la table des clients?

Répondre

2

Quelque chose comme ça devrait faire l'affaire.

UPDATE c 
SET c.AddressLine1 = a.Line1 
FROM Customer c 
    JOIN 
    (
     SELECT CustomerID, MAX(ID) AS LatestId 
     FROM CustomerAddress 
     GROUP BY CustomerID 
    ) latest ON c.ID = latest.CustomerID 
    JOIN CustomerAddress a ON latest.LatestId = a.ID 
+0

Je pense qu'il ya une faute de frappe sur la seconde de la dernière ligne, si je comprends bien '' latest.LatestId' devrait être latest.CustomerID'. Après avoir changé cela a fonctionné correctement. J'ai modifié votre réponse avec le correctif. Je vous remercie. –

+0

@David G - ah oui, c'était une faute de frappe! – AdaTheDev

Questions connexes