1. #1
    Membre du Club Avatar de bertiny
    Homme Profil pro
    Enseignant
    Inscrit en
    mars 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2013
    Messages : 85
    Points : 53
    Points
    53

    Par défaut Requête qui renvoie les notes et les matières

    bonjour.
    j'ai créé une requête qui me renvoie les notes des matières. Mon problème se situe sur la valeur renvoyée par cette requête. si un élève n'a pas de note dans une matière alors cette matière ne sera pas affichée. et mon but est d'avoir la matière même s'il n'y a pas de note ceci dans le but de créer un état bulletin qui ressort toutes les matières d'une classe. si je n'arrive pas à le faire alors dans un bulletin de notes, certain élèves auront plus de matières que d'autres qui n'ont pas composés dans certaine matières. Je veux d'abord pour ceux qui vont réagir exclure le fait qu'on doit mettre une valeur par défaut de la note parce que dans mon cas, un apprenant peut ne pas composer une matière alors on annule juste le coefficient de celle-ci mais elle apparait bien dans son bulletin avec une valeur vide.
    Merci pour votre bonne compréhension.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    9 854
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 9 854
    Points : 15 124
    Points
    15 124

    Par défaut

    Bonjour.

    si un élève n'a pas de note dans une matière alors cette matière ne sera pas affichée
    Access affiche très bien les données qui sont là mais a plus de misère a inventer celle qui ne sont pas là.

    Tu peux contourner le problème en procédant ainsi :

    • Faire une requête qui te donne la liste des matières (basée sur ta table des matières très probablement) et mettre en jointure les notes des élèves (sur la clefMatière).
      Il faut changer les propriétés de la jointure pour mettre "tous les enregistrements de tblMatiere et seulement ceux qui correspondent dans tblNote" (ou quelque chose d'approchant, cela devrait être le 2ième choix de jointure).

      ou
    • Faire une requête produit croisé tblMatiere, tblEleve (les 2 tables sans jointure) avec les mêmes champs que tblNote.
      Cela va assigner chacune des matières à chacun des élèves.
      Je vais l'appeler reqMatiereEleve.

      Faire une requête union :

      Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      select tblNote.* from tblNote
      union select reqMatiereEleve. * from reqMatierEleve

      Comme cela tu es sur que chaque élève aura au moins une note dans chaque matière.


    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre du Club Avatar de bertiny
    Homme Profil pro
    Enseignant
    Inscrit en
    mars 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2013
    Messages : 85
    Points : 53
    Points
    53

    Par défaut

    Je vais l'essayer et voir à quoi ça ressemble.

  4. #4
    Membre du Club Avatar de bertiny
    Homme Profil pro
    Enseignant
    Inscrit en
    mars 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2013
    Messages : 85
    Points : 53
    Points
    53

    Par défaut

    J'ai un message, le nombre de colonnes dans les deux tables ou requêtes sélectionnés d'une union ne correspond pas

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    9 854
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 9 854
    Points : 15 124
    Points
    15 124

    Par défaut

    Bonjour.

    Il faut t'assure que ta requête de données et requête de matières ont exactement le même nombre de colonnes affichées.
    Probablement que tu devras créer des colonnes vides (ex : NomTaCollonne : Null) dans ta requête des matrières.
    Attention c'est le nombre de colonnes qui provoque l'erreur pas leur nom ou leur ordre mais il est important de s'assurer que les colonnes de données dans les 2 requêtes soient les mêmes.
    Personnellement je fais aussi attention que les noms des colonnes soient les mêmes, cela facilite grandement la maintenance.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Membre du Club Avatar de bertiny
    Homme Profil pro
    Enseignant
    Inscrit en
    mars 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2013
    Messages : 85
    Points : 53
    Points
    53

    Par défaut

    J'ai adapté la première méthode et je reçois le message
    instruction SQL non exécutée en raison de jointures externes ambiguës. Pour forcer l'ordre d'exécution d'une des jointures en première, créer une requête distincte qui exécute la première jointure, puis insérez cette requête dans votre instruction SQL
    . Sans cette modification la requête fonctionne normalement mais avec le problème que j'ai signalé plus haut.

  7. #7
    Membre du Club Avatar de bertiny
    Homme Profil pro
    Enseignant
    Inscrit en
    mars 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2013
    Messages : 85
    Points : 53
    Points
    53

    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT [nom_eleve] & " " & [prenom_eleve] AS NomPrenom, Matiere.Groupe, Matiere.nom_matiere, Compose.note_compose, Matiere.coef_matiere, [Compose]![note_compose]*[Matiere]![coef_matiere] AS note_coef, IIf([Compose].[note_compose] Between 0 And 2.99,'Nul',IIf([Compose].[note_compose] Between 3 And 5.99,'Très Faible',IIf([Compose].[note_compose] Between 6 And 7.99,'Faible',IIf([Compose].[note_compose] Between 8 And 8.99,'Insuffisantl',IIf([Compose].[note_compose] Between 9 And 9.99,'Médiocre',IIf([Compose].[note_compose] Between 10 And 11.99,'Passable',IIf([Compose].[note_compose] Between 12 And 13.99,'Assez-bien',IIf([Compose].[note_compose] Between 14 And 15.99,'Bien',IIf([Compose].[note_compose] Between 16 And 17.99,'Très-bien',IIf([Compose].[note_compose] Between 18 And 19.99,'Excellent',IIf([Compose].[note_compose]=20,'Parfait'))))))))))) AS Apprecier, Enseignant.nom_enseignant, Classe.nom_classe, Sequence.valeur, Eleve.id_eleve, ElementDiscipline.Nom_element, Discipline.Absence, [Rang Sequentiel].Rang
    FROM Sequence INNER JOIN ((Matiere INNER JOIN (((Classe INNER JOIN (Eleve INNER JOIN [Rang Sequentiel] ON Eleve.id_eleve = [Rang Sequentiel].id_eleve) ON Classe.id_classe = Eleve.id_classe_fk) INNER JOIN Compose ON Eleve.id_eleve = Compose.id_eleve_fk) INNER JOIN (ElementDiscipline INNER JOIN Discipline ON ElementDiscipline.id_element = Discipline.id_element) ON Eleve.id_eleve = Discipline.id_eleve) ON Matiere.id_matiere = Compose.id_matiere_fk) INNER JOIN Enseignant ON Matiere.id_matiere = Enseignant.id_matière_fk) ON (Sequence.id_sequence = Discipline.id_sequence) AND (Sequence.id_sequence = Compose.id_sequence_fk)
    GROUP BY [nom_eleve] & " " & [prenom_eleve], Matiere.Groupe, Matiere.nom_matiere, Compose.note_compose, Matiere.coef_matiere, [Compose]![note_compose]*[Matiere]![coef_matiere], IIf([Compose].[note_compose] Between 0 And 2.99,'Nul',IIf([Compose].[note_compose] Between 3 And 5.99,'Très Faible',IIf([Compose].[note_compose] Between 6 And 7.99,'Faible',IIf([Compose].[note_compose] Between 8 And 8.99,'Insuffisantl',IIf([Compose].[note_compose] Between 9 And 9.99,'Médiocre',IIf([Compose].[note_compose] Between 10 And 11.99,'Passable',IIf([Compose].[note_compose] Between 12 And 13.99,'Assez-bien',IIf([Compose].[note_compose] Between 14 And 15.99,'Bien',IIf([Compose].[note_compose] Between 16 And 17.99,'Très-bien',IIf([Compose].[note_compose] Between 18 And 19.99,'Excellent',IIf([Compose].[note_compose]=20,'Parfait'))))))))))), Enseignant.nom_enseignant, Classe.nom_classe, Sequence.valeur, Eleve.id_eleve, ElementDiscipline.Nom_element, Discipline.Absence, [Rang Sequentiel].Rang, Eleve.nom_eleve, Classe.id_classe, Sequence.id_sequence
    HAVING (((Classe.id_classe)=[Formulaires]![Bulletin séquentiel]![ListeClasse]) AND ((Sequence.id_sequence)=[Formulaires]![Bulletin séquentiel]![Sequence]));

  8. #8
    Membre expert Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    mai 2008
    Messages
    2 299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 2 299
    Points : 3 747
    Points
    3 747

    Par défaut

    Bonjour,

    C'est pas très lisible comme présentation

    Qq remarques sur cette requete :
    - je ne vois rien qui justifie le group by et donc having devrait être remplacé par where
    - personnellement j'écris toujours mes jointures "de gauche à droite"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from ((a inner join b on ...) inner join c on ...) left join d on ...
    - je pense que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ON (Sequence.id_sequence = Discipline.id_sequence) AND (Sequence.id_sequence = Compose.id_sequence_fk)
    Pose un problème d'interprétation et explique le message. Il ne me semble pas logique de faire la jointure sur le même champ dans 3 tables
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

Discussions similaires

  1. Requête qui renvoie les locks sur un schéma
    Par LNA97 dans le forum Administration
    Réponses: 1
    Dernier message: 18/03/2015, 09h46
  2. Réponses: 12
    Dernier message: 13/02/2015, 15h43
  3. Réponses: 4
    Dernier message: 06/08/2012, 00h41
  4. Requête qui renvoie les valeurs les plus souvent affichés
    Par athos7776 dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 25/07/2007, 17h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo