Bonjour,
Excusez-moi, ça va être un peu long pour bien m'exprimer.
Je n'arrive pas à résoudre mon problème, pourtant j’y ai passé des heures, peut-être s’agit-il d’un truc tout simple ?
Dans ma base de données Access2000, j'ai trois tables:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Eleve (RefE, NomE, PrenomE, FormationE) Support (RefS, NomS, SerieS) Test (RefT, DateT, NoteT, RefS#, RefE#)
--> Dans la table Test, RefE et RefS sont des clés étrangères.
Je souhaite faire une requete affichant la liste des support les MOINS vus (dont les supports jamais vus bien sûr).
J'ai réussi à faire une requête , mais elle me donne seulement les supports les moins vus PARMI les supports vus :
Avec le code SQL suivant (créé par Access) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT TOP 1 [NomE] & " " & [PrenomE] AS Elève, [NomS] & "-" & [SerieS] AS Support, Count(Test.RefT) AS Total, Elève.RefE FROM Support INNER JOIN (Elève INNER JOIN Test ON Elève.RefE = Test.RefE) ON Support.RefS = Test.RefS GROUP BY [NomE] & " " & [PrenomE], [NomS] & " " & [SérieS], Elève.RefE ORDER BY Count(Test.RefT);
J’obtiens le support le moins vu pour chaque élève, avec le nombre de fois où il l’a vu. Ca donne (exemple):
- Leclerc Aurore // MATHS – Multiplications par 10 // 1
Darnault Fidji // FRANÇAIS – Verbes du troisième groupe // 3
Etc… Mais si un support n’a jamais été testé, il ne s’affiche pas.
A côté de ça, j’ai fait une requête appelant une autre requête qui me donne les supports NONS VUS :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT DISTINCT [Elève].[RefE], [NomE] & " " & [PrenomE] AS Elève, [NomS] & " " & [SérieS] AS Expr1, [ISNull].[RefS] FROM ISNull, Elève INNER JOIN Test ON [Elève].[RefE]=[Test].[RefE];
Elle appelle la requete nommée IsNull:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT Support.NomS, Support.SérieS, Requête2.RefS FROM Support LEFT JOIN Requête2 ON Support.RefS = Requête1.RefS WHERE (((Requête1.RefS) Is Null));
Qui elle-même appelle la Requête1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT DISTINCTROW Elève.RefE, Elève.NomE, Elève.PrenomE, Test.RefT, Test.RefS FROM Elève INNER JOIN Test ON Elève.RefE = Test.RefE GROUP BY Elève.RefE, Elève.NomE, Elève.PrenomE, Test.RefT, Test.RefS;
Le problème avec cette requête c’est qu’elle me renvoie toujours la même liste de supports (ceux qui n’ont JAMAIS été vus, par AUCUN élève). Or, je veux qu’elle renvoie les supports nons vus pour chaque élève, et cette liste doit différer selon la valeur de RefE qui est dans le formulaire de base).
Pour la requête des supports nons vus, j’ai essayé d’utiliser NOT IN ou NOT EXISTS basée sur une requête regroupant les supports vus pour chaque élève, mais le résultat de la requête est vide ! Logique, puisque les supports NONS vus n’apparaissent pas dans les supports VUS. J’ai enfin essayé de mettre la condition SupportsVus.RefS <> Support.RefS mais le même problème se pose.
Du coup, j’ai essayé la « requête de non-correspondance d’Access, mais je retombe sur le problème de la liste qui ne varie pas pour chaque élève. Grrrr….
Je remercie d’avance celui qui pourra m’aider.
Partager