2010-06-18 7 views
2

Besoin d'Informix SQL ...instruction SQL de mise à jour automatique pour le référencement Informix

cours obtiennent une note régulière, mais leurs laboratoires associés obtiennent une note de « LAB ». Je dois mettre à jour la table afin que la note de laboratoire corresponde à la note du cours. De plus, s'il n'y a pas de cours correspondant pour un laboratoire, cela signifie que le cours a été annulé. Dans ce cas, je veux placer une valeur de drapeau de 'X' pour son grade.

Exemple de données avant la mise à jour:

id  yr sess crs_no     hrs grd 

    725 2009 FA COLL101  3.000000000000 C 
    725 2009 FA ENGL021  3.000000000000 FI 
    725 2009 FA ENGL021L  1.000000000000 LAB 
    725 2009 FA ENGL031  3.000000000000 FNI 
    725 2009 FA ENGL031L  1.000000000000 LAB 
    725 2009 FA MATH010  3.000000000000 FNI 
    725 2010 SP AOTE101  3.000000000000 C 
    725 2010 SP ENGL021L  1.000000000000 LAB 
    725 2010 SP ENGL031  3.000000000000 FI 
    725 2010 SP ENGL031L  1.000000000000 LAB 
    725 2010 SP MATH010  3.000000000000 FNI 
    726 2010 SP SPAN101  3.000000000000 FN 

Exemple de données après la mise à jour:

id  yr sess crs_no     hrs grd 

    725 2009 FA COLL101  3.000000000000 C 
    725 2009 FA ENGL021  3.000000000000 FI 
    725 2009 FA ENGL021L  1.000000000000 FI 
    725 2009 FA ENGL031  3.000000000000 FNI 
    725 2009 FA ENGL031L  1.000000000000 FNI 
    725 2009 FA MATH010  3.000000000000 FNI 
    725 2010 SP AOTE101  3.000000000000 C 
    725 2010 SP ENGL021L  1.000000000000 X 
    725 2010 SP ENGL031  3.000000000000 FI 
    725 2010 SP ENGL031L  1.000000000000 FI 
    725 2010 SP MATH010  3.000000000000 FNI 
    726 2010 SP SPAN101  3.000000000000 FN 

J'ai travaillé une solution pour cela, mais il a fallu beaucoup de sur la volée composites clés étrangères construit à partir de la concaténation de l'ID, yr, sess et de la sous-chaîne crs_no. Ma solution n'est pas seulement excessive, mais elle comporte des lacunes et cela prend trop de temps à traiter.

Je sais qu'il y a un moyen plus simple de le faire, mais je suis allé si loin sur une route que j'ai de la difficulté à penser à une approche différente.

Répondre

2
UPDATE   det_list 
SET    grd = (SELECT c.grd 
         FROM cw_rec c 
         WHERE c.id = det_list.id 
           AND c.sess = det_list.sess 
           AND c.yr = det_list.yr 
           AND c.crs_no = substr(det_list.crs_no,0,7) 
           AND stat NOT IN ('D','X') 
           AND hrs > 0 
           AND grd <> 'IP') 
       WHERE grd = 'LAB'; 
0
UPDATE lab 
SET grd = NVL(crs.grd, 'X') 
FROM Grades lab 
LEFT JOIN Grades crs 
    ON crs.id = lab.id 
    AND crs.yr = lab.yr 
    AND crs.sess = lab.sess 
    AND crs.crs_no || 'L' = lab.crs_no 
WHERE lab.grd = 'LAB' 
+0

informix n'aime pas ça ... et + devrait être || pour la syntaxe – CheeseConQueso

+0

@cheeseconqueso Merci j'ai mis à jour ma réponse –

0

faciliteraient-ils la question clé composite plus facile si vous avez créé une nouvelle colonne qui contient les valeurs concaténées de chaque colonne et créer une même colonne pour le fk? .. Fromage au fromage, avez-vous déjà essayé le code de programmation horaire AM/PM que je vous ai fourni pour votre rapport Ace?

+0

non je n'ai pas encore essayé le code am/pm, mais je le garde pour quand je ne suis pas occupé un jour – CheeseConQueso

+0

et si le même cours a une note et un section du cours a un laboratoire? –