Bonjour à vous tous,
Lors d'une question précédente dans la section Oracle SQL, on m'a aidé à construire avec succès une requête pour trouver les séquences manquantes tout en allant chercher les valeurs associées à l'enregistrement précédent. Pour y arriver, nous avons utilisé la fonction Oracle "coalesce". Malheureusement, cette fonction ne semble pas exister sous MsAccès (DAO), quoique je ne connais pas très bien MsAccess.
Donc, j'aimerais que vous puissiez m'aider à construire une fonction compatible MsAccess 2003 qui me permettrait de faire sensiblement la même chose que sous Oracle. Attention si vous regardez mon post sous Oracle, car dans ma question originale, je ne devais pas traiter de colonne "Groupe".
Mon objectif est d'insérer les données manquantes dans une table, et ce, en fonction de l'enregistrement précédent du même groupe.
À titre d'exemple, j'ai une table "MaTable" qui contient une liste de données (colonnes "Pb" et "Code") qui sont fonction d'un numéro de semaine (NoSem). Ces données sont regroupées via une colonne "Groupe". Malheureusement, les données dans "MaTable" sont incomplètes et je dois combler les "trous". Pour la colonne "NoSem", je dois inscrire le numéro de semaine manquant. Pour les colonnes "Pb" et "Code", je dois aller chercher les valeurs associées au numéro de semaine précédente (s'il n'y a pas de semaine précédente, alors il faut aller chercher la dernière disponible). Ces traitements doivent se faire pour chaque "Groupe".
Aux fins de simplifications, on peut considérer qu'il n'y que 6 semaines possible (1 à 6). Donc, si les données de "MaTable" étaient définies par la requête suivante:
J'aimerais que les enregistrements suivants soient ajoutés dans "MaTable"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 WITH MaTable AS( SELECT 'A1A1A' AS Groupe, 2 AS NoSem, 327 AS Pb, 'bbb' AS Code FROM dual union ALL SELECT 'A1A1A' , 3 , NULL , 'ccc' FROM dual union ALL SELECT 'A1A1A' , 5 , 349 , NULL FROM dual union ALL SELECT 'B2B2B' , 2 , 222 , 'bbb' FROM dual union ALL SELECT 'B2B2B' , 3 , 333 , 'ccc' FROM dual union ALL SELECT 'B2B2B' , 4 , 444 , 'ddd' FROM dual union ALL SELECT 'B2B2B' , 5 , 555 , 'eee' FROM dual union ALL SELECT 'B2B2B' , 6 , 666 , 'fff' FROM dual )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 GROUPE LVL FROMID PB CODE ---------- ---------- ---------- ---------- ---- A1A1A 1 5 349 A1A1A 4 3 ccc A1A1A 6 5 349 B2B2B 1 6 666 fff
Dans l'exemple précédent, on doit ajouter les semaines 1, 4 et 6 du groupe "A1A1A", car elles sont manquantes dans "MaTable". On doit aussi ajouter la semaine 1 du groupe "B2B2B".
Pour la semaine 1 du groupe "A1A1A", on inscrit les valeurs des colonnes "Pb" et "Code" de la semaine 5, car il n'y a aucun NoSem précédant la semaine 1. Il faut savoir que les semaines bouclent (c'est la semaine 6 qui précède la semaine 1). Or, comme le NoSem=6 n'existe pas dans "MaTable", il faut prendre les valeurs de la semaine précédente à cette 6e semaine manquante, ce qui correspond à la semaine NoSem=5. J'espère être assez clair...
Pour la semaine 4 du groupe "A1A1A", on inscrit les valeurs des colonnes "Pb" et "Code" de la semaine 3, car la semaine 3 correspond à la semaine précédente la semaine 4 manquante de "MaTable".
Pour la semaine 6 du groupe "A1A1A", on inscrit les valeurs des colonnes "Pb" et "Code" de la semaine 5, car la semaine 5 correspond à la semaine précédente la semaine 6 manquante de "MaTable".
Pour la semaine 1 du groupe "B2B2B", on inscrit les valeurs des colonnes "Pb" et "Code" de la semaine 6, car il n'y a aucun NoSem précédant la semaine 1. Il faut savoir que les semaines bouclent (c'est la semaine 6 qui précède la semaine 1).
Merci beaucoup!
Partager