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 :

Comment regrouper avec une condition dans une requête


Sujet :

Requêtes et SQL.

  1. #1
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut Comment regrouper avec une condition dans une requête
    Bonjour, j'ai un petit souci.

    J'alimente des listBox, à l'aide de requête. C'est listBox, me servent par la suite de filtre, pour filtrer une zone de liste.

    Je souhaite filtrer dans ma table maintenance préventive. Si je prend par exemple, la listBox des périodicité, je voudrais qu'elle affiche toutes les périodicités présentent dans ma table, et qu'elle les regroupe. Si je ne met pas d'autres conditions dans ma requête, sa fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT tbl_MaintenancePréventive.ID_Périodicité, tbl_Périodicité.Peridodicité
    FROM tbl_Périodicité INNER JOIN tbl_MaintenancePréventive ON tbl_Périodicité.ID_Periodicité = tbl_MaintenancePréventive.ID_Périodicité
    GROUP BY tbl_MaintenancePréventive.ID_Périodicité, tbl_Périodicité.Peridodicité;
    et j'obtient dans ma liste:

    Quotidien
    Hebdomadaire
    Mensuel
    Semestriel

    En revanche, moi ce que je déqire faire, comme dans ma zone de liste, je n'ai que les actions de maintenance préventive à effectuer, c'est n'afficher dans mes listBox, les éléments de la table, dont la prochaine date d'intervention est <= à la date d'aujourd'hui.

    Donc dans ma reqête, j'ajoute dans la case critère

    <=Date()
    J'obtient donc la requête suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT tbl_MaintenancePréventive.ID_Périodicité, tbl_Périodicité.Peridodicité, tbl_MaintenancePréventive.DateProchaineIntervention
    FROM tbl_Périodicité INNER JOIN tbl_MaintenancePréventive ON tbl_Périodicité.ID_Periodicité = tbl_MaintenancePréventive.ID_Périodicité
    GROUP BY tbl_MaintenancePréventive.ID_Périodicité, tbl_Périodicité.Peridodicité, tbl_MaintenancePréventive.DateProchaineIntervention
    HAVING (((tbl_MaintenancePréventive.DateProchaineIntervention)<=Date()));
    Mais dans ma listBox, je retrouve les champs suivants:

    Quotidien
    Quotidien
    Hebdomadaire
    Mensuel

    Sa ne me groupe plus, et je ne comprend pas pourquoi???

    Ce n'est pas comme sa qu'il faut procéder?

    C'est pareil pour mes autres listes!

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Il faut enlever tbl_MaintenancePréventive.DateProchaineIntervention du Group By et remplacer le Having par un Where.

  3. #3
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Re et merci pour ton aide, mais j'ai 2 soucis, si je remplace le Having par un where, comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT tbl_MaintenancePréventive.ID_Périodicité, tbl_Périodicité.Peridodicité, tbl_MaintenancePréventive.DateProchaineIntervention
    FROM tbl_Périodicité INNER JOIN tbl_MaintenancePréventive ON tbl_Périodicité.ID_Periodicité = tbl_MaintenancePréventive.ID_Périodicité
    GROUP BY tbl_MaintenancePréventive.ID_Périodicité, tbl_Périodicité.Peridodicité, tbl_MaintenancePréventive.DateProchaineIntervention
    where (((tbl_MaintenancePréventive.DateProchaineIntervention)<=Now()));
    Sa me met:

    Erreur de syntaxe (opérateur absent) dans l'expression 'table_MaintenancePreventive.DateProchaineIntervention where....
    Et si j'enleve " tbl_MaintenancePréventive.DateProchaineIntervention" du GroupBy, j'obtient donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT tbl_MaintenancePréventive.ID_Périodicité, tbl_Périodicité.Peridodicité, tbl_MaintenancePréventive.DateProchaineIntervention
    FROM tbl_Périodicité INNER JOIN tbl_MaintenancePréventive ON tbl_Périodicité.ID_Periodicité = tbl_MaintenancePréventive.ID_Périodicité
    GROUP BY tbl_MaintenancePréventive.ID_Périodicité, tbl_Périodicité.Peridodicité
    having (((tbl_MaintenancePréventive.DateProchaineIntervention)<=Now()));
    Et j'ai le message d'erreur:

    Vous avez essayé d'executer une requête ne comprenant pas l'expression spécifiée 'Date prochaine intervention comme une partie de la fonction de l'agréat
    Donc je ne sais pas comment faire?

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    La date ne doit pas faire partie ni de la sélection, ni du group by.

    Comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT tbl_MaintenancePréventive.ID_Périodicité, tbl_Périodicité.Peridodicité
    FROM tbl_Périodicité INNER JOIN tbl_MaintenancePréventive ON tbl_Périodicité.ID_Periodicité = tbl_MaintenancePréventive.ID_Périodicité
    GROUP BY tbl_MaintenancePréventive.ID_Périodicité, tbl_Périodicité.Peridodicité
    where (((tbl_MaintenancePréventive.DateProchaineIntervention)<=Now()));

  5. #5
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Re

    SELECT tbl_MaintenancePréventive.ID_Périodicité, tbl_Périodicité.Peridodicité
    FROM tbl_Périodicité INNER JOIN tbl_MaintenancePréventive ON tbl_Périodicité.ID_Periodicité = tbl_MaintenancePréventive.ID_Périodicité
    GROUP BY tbl_MaintenancePréventive.ID_Périodicité, tbl_Périodicité.Peridodicité
    where (((tbl_MaintenancePréventive.DateProchaineIntervention)<=Now()));
    Sa me met toujours l'erreur de syntaxe avec le where.

  6. #6
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    C'est bon j'ai trouvé, il fallait inversé le wher et le group by comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT tbl_MaintenancePréventive.ID_Périodicité, tbl_Périodicité.Peridodicité
    FROM tbl_Périodicité INNER JOIN tbl_MaintenancePréventive ON tbl_Périodicité.ID_Periodicité = tbl_MaintenancePréventive.ID_Périodicité
    WHERE (((tbl_MaintenancePréventive.DateProchaineIntervention)<=Now()))
    GROUP BY tbl_MaintenancePréventive.ID_Périodicité, tbl_Périodicité.Peridodicité;

  7. #7
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    Re je revient rapidement sur mon problème, je voudrais maintenant intégrer une condition Where tbl_MaintenancePréventive.DateProchaineIntervention <=Date() dans cette requête, mai je ne sais pas où l'intégrer dans le code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = "SELECT tbl_MaintenancePréventive.ID_Machine, tbl_Machines.Designation FROM tbl_Machines INNER JOIN tbl_MaintenancePréventive ON tbl_Machines.Id_Machine = tbl_MaintenancePréventive.ID_Machine GROUP BY tbl_MaintenancePréventive.ID_Machine, tbl_Machines.Designation, tbl_Machines.Id_Ligne HAVING tbl_Machines.Id_Ligne= " & lngIDCat & ";"

  8. #8
    Débutant
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Points : 269
    Points
    269
    Par défaut
    J'ai trouvé désolé pour le dérangement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = "SELECT tbl_MaintenancePréventive.ID_Machine, tbl_Machines.Designation FROM tbl_Machines INNER JOIN tbl_MaintenancePréventive ON tbl_Machines.Id_Machine = tbl_MaintenancePréventive.ID_Machine where tbl_Machines.Id_Ligne= " & lngIDCat & " and tbl_MaintenancePréventive.DateProchaineIntervention<=Date() GROUP BY tbl_MaintenancePréventive.ID_Machine, tbl_Machines.Designation, tbl_Machines.Id_Ligne;"
    Merci pour tout!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/02/2015, 18h19
  2. Réponses: 3
    Dernier message: 06/03/2013, 13h00
  3. Réponses: 1
    Dernier message: 21/01/2011, 10h17
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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