2014-04-17 4 views
0

J'ai une table appelée STOCK que je veux mettre à jour qui ressemble à ceci:SQL Server: mettre à jour une table avec des valeurs de même table basée sur ID dans une deuxième table

------------------------- 
NUMBER   | UNITS 
------------------------- 
NA13ALPK1010  | 9 
NA13ALANA1010 | 11 
NA13ALPK1065  | 4 
NA13ALANA106  | 5 
ON0003 XS  | 1 
AT3322 2  | 3 

Basé sur une deuxième table appelée PKGINV qui ressemble à ceci:

---------------------------------------- 
PKGNUMBER  | BOARDNUMBER 
---------------------------------------- 
NA13ALPK1010 | NA13ALANA1010 
NA13ALPK1065 | NA13ALANA106 

d'abord, je voudrais être en mesure de faire un SELECT avec un certain type de jointure pour que je puisse montrer UNITS de STOCK pour les PKGNUMBER et BOARDNUMBER en PKGINV.

Ensuite, je voudrais mettre à jour UNITS dans STOCK lorsque PKGINV.PKGNUMBER = STOCK.NUMBER avec le PKGINV.BOARDNUMBER UNITS de STOCK.

Ainsi, après la mise à jour, NA13ALPK1010 aurait UNITS de 11 (le UNITS de NA13ALANA1010) et NA13ALPK1065 aurait UNITS de 5 (le UNITS de NA13ALANA106).

Merci d'avance pour votre aide à ce sujet!

+1

Je comprends votre besoin avec le 'SELECT' requête, mais pas votre besoin de mettre à jour. Quelle est la règle de gestion que vous voulez appliquer ici? Quelle est la raison de votre mise à jour? –

Répondre

1

Votre SELECT est simplement une question de se joindre à la table STOCK deux fois:

SELECT 
PKGNUMBER_Stock.UNITS AS PKGNUMBER_UNITS 
,BOARDNUMBER_Stock.UNITS AS BOARDNUMBER_UNITS 
FROM 
PKGINV AS pkginv 
JOIN STOCK AS PKGNUMBER_Stock ON PKGNUMBER_Stock.NUMBER = pkginv.PKGNUMBER 
JOIN STOCK AS BOARDNUMBER_Stock ON BOARDNUMBER_Stock.NUMBER = pkginv.BOARDNUMBER 

De même, l'instruction UPDATE doit simplement correspondre à la jointure défini ci-dessus:

UPDATE PKGNUMBER_Stock 
SET PKGNUMBER_Stock.UNITS = BOARDNUMBER_Stock.UNITS 
FROM 
PKGINV AS pkginv 
JOIN STOCK AS PKGNUMBER_Stock ON PKGNUMBER_Stock.NUMBER = pkginv.PKGNUMBER 
JOIN STOCK AS BOARDNUMBER_Stock ON BOARDNUMBER_Stock.NUMBER = pkginv.BOARDNUMBER 
+0

merci. J'ai accepté cette réponse comme la plus complète, bien que la première réponse ci-dessus ait également abordé la question. – sconnie

0

Vous devez joindre Stock à PKGINV deux fois:

Update s 
set s.UNITS = s2.UNITS 
from STOCK s 
join PKGINV p on s.NUMBER = p.PKGNUMBER 
join STOCK s2 on p.BOARDNUMBER = s2.NUMBER 
Questions connexes