2009-03-10 6 views
0

J'ai 2 tables temporaires. On a des colonnes de données sages.Liaison de tables temporaires avec une structure différente

OrderCode OrderType 
ABC   1000 

On a des données rangée sage

FieldName Value 
ORDER_CODE ABC 
ORDER_TYPE 2000 

Je dois écrire une requête qui joint essentiellement deux d'entre eux et met à jour la valeur si elle existe dans le tableau 2.

résultat Recordset doit être

OrderCode OrderType 
ABC  2000 

EDIT-

S'il y a 2 commandes dans le tableau 1 avec le même ordre du code:

OrderCode OrderType 
ABC   1000 
ABC  5000 

le jeu de résultats devra être

OrderCode OrderType 
    ABC   2000 
    ABC   2000 
+0

S'il y a deux ordres dans la Table2, comment les distinguez-vous? – Quassnoi

+0

S'il y a deux commandes dans la première table, je devrai également le mettre à jour. Edité comme un ex – DotnetDude

+0

Ok, mais dans la table 2, comment distinguer les différents codes de commande? Si vous avez deux commandes avec les codes ABC et DEF, comment pouvez-vous mettre ORDER_CODE dans le tableau des lignes? – Quassnoi

Répondre

1

Pour sélectionner l'ensemble de lignes:

SELECT tt1.ordercode, tt2_type.Value 
FROM Table2 AS tt2_code 
JOIN Table1 tt1 
ON  tt1.orderCode = tt2_code.value 
JOIN 
     Table2 AS tt2_type 
ON  tt2_type.fieldName = 'ORDER_TYPE' 
WHERE tt2_code.fieldName = 'ORDER_CODE' 

Pour mettre à jour Table1 en fonction des valeurs de Table2:

WITH q AS 
    (
    SELECT tt1.ordercode, tt2_type.Value 
    FROM Table2 AS tt2_code 
    JOIN Table1 tt1 
    ON  tt1.orderCode = tt2_code.value 
    JOIN 
      Table2 AS tt2_type 
    ON  tt2_type.fieldName = 'ORDER_TYPE' 
    WHERE tt2_code.fieldName = 'ORDER_CODE' 
    ) 
UPDATE q 
SET oldvalue = newvalue 

C'est l'un des cas où la syntaxe JOIN -less est plus lisible.

+0

Dans la clause FROM, qu'est-ce que tt2? – DotnetDude

+0

Je pense que cela devrait être Table2 –

+0

Cool, cette requête fonctionne dans le 2e scénario (Pls voir Modifier) ​​ – DotnetDude

Questions connexes