Cela peut être assez basique pour la plupart, mais j'aimerais obtenir de l'aide. P>
Utilisation de SQL Server J'ai la table de commande suivante (Exclert Excel pour simplifier): P>
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. P>
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. P>
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. P>
Merci! P>
4 Réponses :
Vous pouvez utiliser corrélation em> sous-requête avec mise à jour code> instruction:
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
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
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