-1
votes

SQL Server - Code de mise à jour des valeurs à l'aide de la requête intérieure

Cela peut être assez basique pour la plupart, mais j'aimerais obtenir de l'aide.

Utilisation de SQL Server J'ai la table de commande suivante (Exclert Excel pour simplifier):

 extrait excel simplifié

Veuillez noter qu'il existe plusieurs commandes (orderid). Certains peuvent avoir une valeur «primaire», ce qui signifie qu'ils sont liés à une commande existante. Les commandes connexes reçoivent le "primaire" du 1er ordonnance associé et un "orderdindex" notant la commande qu'ils entraient. Seul le premier ordre dans chaque ensemble a une valeur. Si "primaire" d'un ordre est null, cela signifie qu'il s'agit d'une seule commande et je devrais simplement l'ignorer.

Ce dont j'ai besoin, c'est à l'aide de la commande SQL Server Update, donnez toutes les commandes liées, la même "valeur" que "la valeur" de leur 1ère commande correspondante. Signification pour chaque commande qui a "orderdindex"> 1, mettre à jour le champ de valeur de NULL à sa valeur "primaire". Si "primaire" = 1 ou est null, ignorez et ne mettez pas à jour.

 résultat souhaité

J'ai essayé une simple jointure intérieure mais s'est perdue. Je ne pense pas que cela devrait être trop compliqué, mais j'aurais peut-être trop réfléchir.

Merci!


0 commentaires

4 Réponses :


0
votes

Vous pouvez utiliser corrélation sous-requête avec mise à jour instruction: xxx


0 commentaires

0
votes

Peut-être quelque chose comme ceci:

UPDATE #table
SET a.Value=b.Value
FROM #table a INNER JOIN #table b 
        on a.OrderID=b.PrimaryOrder and a.OrderIndex>1 and a.Value is NULL


0 commentaires

0
votes
UPDATE o
SET Value=MaxVals.MaxValue
FROM Orders o
INNER JOIN (
    SELECT MAX(Value) AS MaxValue, PrimaryOrder
    FROM Orders
    WHERE PrimaryOrder IS NOT NULL
    GROUP BY PrimaryOrder
) AS MaxVals ON MaxVals.PrimaryOrder=o.PrimaryOrder
WHERE o.Value IS NULL

0 commentaires

0
votes

Merci à tous. A réussi à prendre quelque chose de tout ce qui précède et cela résolu:

UPDATE O
    SET O.[Value] = B.[Value]
FROM Orders O INNER JOIN Orders B
ON O.PrimaryOrder = B.[PrimaryOrder] and O.OrderIndex > 1 and O.[Value] is NULL
AND B.[OrderIndex] = 1


0 commentaires