IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

derniere evaluation de chaque employe


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Points : 52
    Points
    52
    Par défaut derniere evaluation de chaque employe
    Salut
    J ai une table ÉVALUATION contenant toutes les évaluations de tous les employés. J aimerais une requête me retournant l'ensemble des dernières évaluations de l'ensemble des employés.
    Ce qui m'intéresse c'est le "EmployeId" de chaque employé et son "Score" a
    sa dernière évaluation. Afin de déterminer quelle est la dernière évaluation j'ai un "NumEval" qui est un numéro Auto dans ma table.
    J'ai essaye:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Max(NumEval) As NumeroEvaluation, EmployeId , Score
    FROM Evaluation
    GROUP BY EmployeId, Score
    Le problème si a employé a été évalué 2 fois et a obtenu respectivement 12 et 15 comme score, il me donne les deux lignes dans le résultat de ma requête. Et si jeneleve "Score" du GROUP BY alors jai une erreur.

    Une idée ?

    Merci a tous
    A+
    Pas d'accents sur mon clavier QWERTY !
    Merci de votre comprehension

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour,
    Avec une requête, je ne vois pas.
    Mais avec du VBA, je pourrais t'aider.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Points : 52
    Points
    52
    Par défaut Voici Plus de details et une autre tentative ?!
    Je detaille un peu plus ma question.
    Ma table est definie comme suit:
    EVALUATION
    NumEval (Numero Auto)
    EmployeId
    DISCIPLINE
    TECHNIQUE

    Le "Score" est donc la somme des champs DISCIPLINE et TECHNIQUE.

    Si je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Last(EVALUATION.NumEval) AS NumeroEvaluation, EVALUATION.EmployeId, Last(EVALUATION.DISCIPLINE + EVALUATION.TECHNIQUE) AS Score
    FROM EVALUATION 
    GROUP BY EVALUATION.EmployeId
    Pensez vous que cette requête soit la bonne ?
    En fait je ne comprend pas comment il va gérer les deux "Last"
    se trouvant dans la requête ?
    Merci encore
    Pas d'accents sur mon clavier QWERTY !
    Merci de votre comprehension

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Pensez vous que cette requête soit la bonne ?
    Te donne-t-elle le bon résultat ? Donc ...

    Si tu veux, voici une solution en VBA

    L'idée consiste à se créer une table intermédiare 'EvaluationsDernières' ne contenant que la dernière évaluation de chacun.
    Si tu ne maîtrises pas encore le VBA, j'ai ajouté des commentaires qui te permettront d'au moins comprendre ce qui s'y passe et qui te donneront sans doute envie d'en connaître plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Public Sub EvaluationsDernières()
    Dim rs As DAO.Recordset
    On Error GoTo Erreur
    'créer la table EvaluationsDernières (1ère exécution)
    If CurrentDb.TableDefs("EvaluationsDernières").Name <> "EvaluationsDernières" Then
    DoCmd.CopyObject , "EvaluationsDernières", acTable, "Evaluation"
    End If
    'vidanger EvaluationsDernières
    DoCmd.SetWarnings False
    DoCmd.RunSQL ("DELETE EvaluationsDernières.* FROM EvaluationsDernières;")
    'créer un record set avec les employés évalués
    Set rs = CurrentDb.OpenRecordset("SELECT Evaluation.EmployeID FROM Evaluation GROUP BY Evaluation.EmployeID;")
    'lire les employés un à un
    Do Until rs.EOF
    ' pour chacun copier les dernières évaluations
    DoCmd.RunSQL ("INSERT INTO EvaluationsDernières ( EmployeID, DISCIPLINE, TECHNIQUE ) SELECT TOP 1 Evaluation.EmployeID, Evaluation.DISCIPLINE, Evaluation.TECHNIQUE FROM Evaluation WHERE (((Evaluation.EmployeID)=" & rs(0) & ")) ORDER BY Evaluation.numeval DESC;")
    rs.MoveNext
    Loop
    DoCmd.SetWarnings True
    Exit Sub
    Erreur:
    Select Case Err.Number
    Case 3265   ' la table n'existe pas encore
    Resume Next
    Case Else
    MsgBox "erreur N°" & Err.Number & " " & Err.Description
    DoCmd.SetWarnings True
    Exit Sub
    End Select
    End Sub
    Reviens-moi si cette solution t'intéresse.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 350
    Points : 1 701
    Points
    1 701
    Par défaut
    Bonsoir,

    Ce soir j'ai l'esprit "Joueur", et comme j'aime bien lorsqu'on trouve un champ"Texte",
    comme ici-->NomEmploye :
    Alors j'essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Evaluation.*, [DISCIPLINE]+[TECHNIQUE] AS Score
    FROM Evaluation
    WHERE (((DCount("*","Evaluation","NomEmploye =" & Chr$(34)
     & [NomEmploye] & Chr$(34) & " AND NumEval >=" & [NumEval]))<=1))
    ORDER BY Evaluation.NumEval DESC;
    Ou encore celà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT NumEval, EmployeId, DISCIPLINE, TECHNIQUE, 
    NomEmploye, [DISCIPLINE]+[TECHNIQUE] AS Score, *
    FROM Evaluation
    WHERE (((Evaluation.NumEval) 
    In (SELECT TOP 1 NumEval FROM Evaluation 
    As T WHERE T.NomEmploye = Evaluation.NomEmploye 
    ORDER BY T.NumEval DESC)))
    ORDER BY Evaluation.NumEval DESC , Evaluation.NomEmploye;
    Cordialement.

    Ps : Excusez...Mais comme Vodiem n'est pas là pour me "Chambrer", alors j'en profite pour faire n'importe quoi.
    Questions techniques par MP
    Le peu que je sais, c'est à mon ignorance que je le dois.
    ...............................................................................Sacha Guitry

  6. #6
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    francishop
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  7. #7
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Points : 52
    Points
    52
    Par défaut Impec Mais...
    Impec Francishop , mais je nai pas de NomEmploye dans cette table
    jai donc utilise EmployeId.
    Mais ca se corse. Pour L'instant je fonctionnait sur la base du NumEval pour déterminer la derniere eval de chaque employe, Mais mon manager dans sa grande sagesse vient corser laffaire.
    Je me retrouve avec deux nouveau champ PeriodeEval et AnneeEval.
    Periode est du genre: "1er trimestre", "2nd trimestre" ... etc c'est une valeur provenant d'un combo donc jai 4 valeur possible de periode correspondant a la periode evaluee et bien sur AnneeEval correspond a l'Annee evaluee

    Donc ma table peut contenir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    50          Jean-marc      3eme timestre     2007     14        10       24
    58          Jean-Marc      1er trimestre     2008     17        12       29
    60          Michel         1er trimestre     2008     11        11       22
    61          Jean-Marc      1er trimestre     2008     14        14       28
    ...

    (bien entendu la table contient plusieurs autre champ)
    Comme vous le constater Jean-Marc peut avoir ete évalué plusieurs fois dans la même période (ici le 1er trimestre de 2008).
    Mon Boss veut pour chaque employé La moyenne de son score sur la dernière période ou il a été évalué.

    donc dans cet exemple ce sera

    Jean-Marc 1er trimestre 2008 28.5
    Michel 1er trimestre 2008 22

    Merci a tous
    (J'essaie egalement de mon cote, je vous tient au courant sil ya du nouvo merci)
    A+
    Pas d'accents sur mon clavier QWERTY !
    Merci de votre comprehension

Discussions similaires

  1. extraire le dernier mot de chaque ligne
    Par bezoindaidde dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 28/03/2007, 07h47
  2. Réponses: 15
    Dernier message: 28/02/2007, 10h00
  3. La note au dernier contrôle de chaque élève.
    Par Cédricss dans le forum Requêtes
    Réponses: 2
    Dernier message: 22/09/2006, 12h31
  4. Copie dernier élément de chaque type, sur la feuille suivante
    Par baptbapt dans le forum Macros et VBA Excel
    Réponses: 33
    Dernier message: 26/07/2006, 09h59
  5. Réponses: 26
    Dernier message: 01/07/2006, 13h14

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