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 :

Critère non pris en compte dans ma requête [AC-2003]


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2011
    Messages : 99
    Points : 42
    Points
    42
    Par défaut Critère non pris en compte dans ma requête
    Bonjour,

    J'ai un petit problème dans ma requête, je voudrais faire un regroupement d'horaire et de date. Il existe différents types d'horaires qui peuvent être: M1, M3, S, FF, S5, ....
    Il y a également parfois des case vide dans le champ horaire

    Dans ma requête je souhaite prendre en compte uniquement les horaires M1, M3 et S et ne pas prendre en compte par la même occasion les cases vides.

    Voici le sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT "TT/Matin" AS Item, T_Calendrier.Date, Count(T_PlanningLC.Horraire) AS CompteDeHorraire, T_PlanningLC.Man, T_PlanningLC.Horraire
    FROM T_PlanningLC INNER JOIN T_Calendrier ON (T_PlanningLC.Jour = T_Calendrier.Jour) AND (T_PlanningLC.Semaine = T_Calendrier.Semaine) AND (T_PlanningLC.Année = T_Calendrier.Annee)
    GROUP BY "TT/Matin", T_Calendrier.Date, T_PlanningLC.Man, T_PlanningLC.Horraire
    HAVING (((T_PlanningLC.Horraire) Is Not Null)) OR (((T_PlanningLC.Horraire) Like "M1" Or (T_PlanningLC.Horraire)="M3" Or (T_PlanningLC.Horraire) Like " S"))
    ORDER BY T_Calendrier.Date;
    Le probleme est que mes critères ne sont pas pris en compte :s
    Quelqu'un sait pourquoi ?
    Merci

  2. #2
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    Bonjour Williamm,

    Pour moi, l'utilisation du HAVING est réservé aux fonction de regroupement.
    Essaye plutôt avec un WHERE.
    De plus le not null est superflu, car tu fait des recherches sur des caractères
    Enfin, pourquoi utiliser un LIKE si tu préfixe/suffixe pas par '*' ? un '=' est amplement suffisant

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2011
    Messages : 99
    Points : 42
    Points
    42
    Par défaut
    Justement, ma requête effectue un regroupement d'horaire pour chaque date.

    Par exemple pour le lundi, je veux que ça me donne le nombre de personne qui font du M1, M3 et S. Pareil pour les autres jours de la semaine.

    Comment dois je m'y prendre dans les critères pour avoir que du M1, M3 et S?

  4. #4
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    Essaye ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT "TT/Matin" AS Item, T_Calendrier.Date, Count(T_PlanningLC.Horraire) AS CompteDeHorraire, T_PlanningLC.Man, T_PlanningLC.Horraire
    FROM T_PlanningLC INNER JOIN T_Calendrier ON (T_PlanningLC.Jour = T_Calendrier.Jour) AND (T_PlanningLC.Semaine = T_Calendrier.Semaine) AND (T_PlanningLC.Année = T_Calendrier.Annee)
    GROUP BY "TT/Matin", T_Calendrier.Date, T_PlanningLC.Man, T_PlanningLC.Horraire
    HAVING (((T_PlanningLC.Horraire) IN ("M1","M3","S")))
    ORDER BY T_Calendrier.Date;

  5. #5
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 717
    Points : 57 361
    Points
    57 361
    Billets dans le blog
    42
    Par défaut
    bonjour,

    Citation Envoyé par Williamm Voir le message
    Par exemple pour le lundi, je veux que ça me donne le nombre de personne qui font du M1, M3 et S. Pareil pour les autres jours de la semaine.
    A ce que je comprends, l’horaire ne doit pas faire partie du GROUP BY (et sans doute que T_PlanningLC.Man non plus)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    …GROUP BY "TT/Matin", T_Calendrier.Date, T_PlanningLC.Man, T_PlanningLC.Horraire

    J’essaierais bien avec le regroupement :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    GROUP  BY "TT/Matin", t_calendrier.DATE

    Ce qui donnerait:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT "TT/Matin" AS item, 
           t_calendrier.[Date], 
           COUNT(*)   AS comptedehorraire 
    FROM   t_planninglc 
           INNER JOIN t_calendrier 
             ON ( t_planninglc.jour = t_calendrier.jour ) 
                AND ( t_planninglc.semaine = t_calendrier.semaine ) 
                AND ( t_planninglc.année = t_calendrier.annee ) 
    WHERE  t_planninglc.horraire IN ( "M1", "M3", "S" ) 
    GROUP  BY "TT/Matin", 
              t_calendrier.[Date] 
    ORDER  BY t_calendrier.[Date];


    Si le résultat n’est pas celui espéré, merci d’expliciter avec un jeu de données:
    Citation Envoyé par Williamm Voir le message
    Le probleme est que mes critères ne sont pas pris en compte :s

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2011
    Messages : 99
    Points : 42
    Points
    42
    Par défaut
    Bonjour,

    Alors Dumas j'ai essayé ton code mais sans succès :s merci quand meme
    F-leb, ton code marche bien mais par contre j'ai un problème assez étrange, c'est qu'il m'a fait un regroupement uniquement de "M3" et uniquement sur une seule date.

    Ce n'est pas une erreur de structure car si je ne met aucun critère, j'ai bien les regroupements suivant M1, M3, S ( et du coup aussi des autre horaires que je ne veux pas prendre en compte)

    Je ne sais pas vraiment quoi faire :s

  7. #7
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 717
    Points : 57 361
    Points
    57 361
    Billets dans le blog
    42
    Par défaut
    bonjour,

    Citation Envoyé par Williamm
    F-leb, ton code marche bien mais par contre j'ai un problème assez étrange...
    il marche bien mais non

    Citation Envoyé par Williamm
    ...c'est qu'il m'a fait un regroupement uniquement de "M3" et uniquement sur une seule date.
    ...

    Citation Envoyé par Williamm
    Je ne sais pas vraiment quoi faire :s
    je vais me répéter:
    Citation Envoyé par f-leb
    Si le résultat n’est pas celui espéré, merci d’expliciter avec un jeu de données:
    par "jeu de données" , j'entendais le contenu des tables avec quelques lignes significatives et le résultat que tu souhaites obtenir.

    En dernier recours, tu mets un fichier de démo .mdb compacté/zippé en pièce-jointe.

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2011
    Messages : 99
    Points : 42
    Points
    42
    Par défaut
    Bonjour et merci,

    Je t'ai fais un jeu d'imprime écran assez explicatif en pièce jointe .rar

    Dit moi si tu la bien reçu car c'est la première fois que j'en envoie une

    Merci de ton aide

  9. #9
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 717
    Points : 57 361
    Points
    57 361
    Billets dans le blog
    42
    Par défaut
    bonjour,

    C’est super, on sait maintenant tout sur tes requêtes fausses et sur ce qu’il ne faut pas obtenir ! Tu as juste oublié un truc :
    Citation Envoyé par f-leb Voir le message
    ... et le résultat que tu souhaites obtenir.
    La requête de mon message #5 marche mais peut-être que non et tu ne la reprends pas d’après tes copies d’écran !? Et finalement tu fais une analyse croisée sur la requête fausse de ton 1er message !?
    On ne sait pas ce que tu comptes et comment tu veux regrouper, si c’est par date ? par date et horaire ?
    C’est quoi Man ?

    Donne un exemple du contenu de ta table T_PlanningLC sous forme de tableau avec quelques lignes significatives (je sais, faire des tableaux dans un post du forum c’est pas simple):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Date        horaire    man
    20/06/2011    M1       -1
    20/06/2011    M2       -1
    Etc…
    Puis ce que tu veux obtenir de la même façon avec un tableau ?

    A +

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2011
    Messages : 99
    Points : 42
    Points
    42
    Par défaut
    Man est un champ Vrai/Faux. Certains employés sont cochés Man ou pas.
    Suivant la date, je voudrais savoir combien d'employés qui sont cochés "Man" font des horaires M1, M2 et S.
    "CompteDeHorraire" compte le nombre d'employé qui fait un horaire précis (exemple: M1) suivant si c'est un Man ou pas. (Car il le faut pas oublier que je veux absolument distinguer les gens de la catégorie qui sont cochés "Man" et non "Man"

    Je voudrais donc obtenir une pré-requête qui ressemble à ça en mode feuille de donnée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      Date               CompteDeHoraire            Man          Horaire
     
           20/06/2011           X                    0            M1
           20/06/2011           Y                    0            M2
           20/06/2011           Z                    0             S
           20/06/2011           T                   -1            M1
           20/06/2011           R                   -1            M2
           20/06/2011           S                   -1             S
    Evidement, je veux la même chose pour toute les dates concernées.

    Si j'arrive déja à obtenir cette pré-requête, je pense pouvoir facilement avoir ma reqûete sous forme d'une analyse croisée avec en tete de colonne les dates, en tête de lignes: les horaires et le Man (0 et -1) et comme valeur: CompteDeHoraire.

    Dans ma table PlanningLC:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       Année       Semaine      Jour        Equipe       Noms      Horaire         Man
                11           25        Lu         1         X          M1          0
                11           25        Ma        1         X         ABS          0
                11           25        Me        1         X          M2           0
                11           25        Je         1         X           S            0
                11           26        Ma        1         X          Repos       0
                ...           ...         ...        ...        ...           ...         ...
                11           25         Lu        2         Y           M1         -1
                ...            ...        ...       ...         ...           ...         ...
    Sachant qu'il y a un grand nombre d'employé.
    Tu souhaites d'autres infos?
    Merci pour ton aide

  11. #11
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 717
    Points : 57 361
    Points
    57 361
    Billets dans le blog
    42
    Par défaut
    hé bien dans ta "pré-requête", il suffit de rajouter une condition WHERE juste avant le GROUP BY:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ...WHERE  t_planninglc.horraire IN ( "M1", "M3", "S" )
    En mode construction, rajouter une colonne:
    champ: horraire
    Table: t_planninglc
    Opération: Où
    Tri:
    Afficher: Non
    Critères: In ( "M1"; "M3"; "S" )

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2011
    Messages : 99
    Points : 42
    Points
    42
    Par défaut
    Petite erreur d'écriture de ma part, ce n'est pas M3 mais M2 (c'est sans intérêt de toute manière)
    Malheureusement ça ne m'affiche pas ce que je veux :s

    Avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT "TT/Matin" AS Item, T_Calendrier.Date, Count(T_PlanningLC.Horraire) AS CompteDeHorraire, T_PlanningLC.Man, T_PlanningLC.Horraire
    FROM T_PlanningLC INNER JOIN T_Calendrier ON (T_PlanningLC.Jour = T_Calendrier.Jour) AND (T_PlanningLC.Semaine = T_Calendrier.Semaine) AND (T_PlanningLC.Année = T_Calendrier.Annee)
    WHERE T_PlanningLC.Horraire IN ("M1", "M2", "S")
    GROUP BY "TT/Matin", T_Calendrier.Date, T_PlanningLC.Man, T_PlanningLC.Horraire
    ORDER BY T_Calendrier.Date;
    J'obtient juste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Item        Date     CompteHoraire     Man     Horaire
    TT/Matin   08/07/2011        1          0          M2
    C'est vraiment très étrange car il figure d'autre M2 pour d'autres dates et Man :s

  13. #13
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 717
    Points : 57 361
    Points
    57 361
    Billets dans le blog
    42
    Par défaut
    bon et ben je ne vois pas ce qui cloche

    A moins qu'un forumeur de passage ici ait une piste, je propose que tu mettes un bout de ton fichier Access compacté et zippé en pièce-jointe.

    On va bien finir par y arriver

  14. #14
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2011
    Messages : 99
    Points : 42
    Points
    42
    Par défaut
    Salut f-leb,

    J'ai enfin compris ce qui n'allait pas (Ouhrahh)
    C'etait assez difficile d'y penser; dans la pré-requete j'avais introduis un champ Expr: Gauche([Horaire],1)
    Or chose que je n'avais pas soupçonné, dans mon champ horaire, il y avait un espace entre la marge gauche et l'horaire M1,M2,S dans chaque cellule, sauf pour une qui correspondait bien à la date 08/07/2011.
    J'ai donc supprimé l'espace vide qui était en trop et j'ai enfin tout ce que je veux dans ma requête!

    Merci à toi pour l'aide que tu m'as apporté

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

Discussions similaires

  1. Code html non pris en compte dans un ToolTip ?
    Par Hujii dans le forum ASP.NET
    Réponses: 8
    Dernier message: 14/05/2009, 19h59
  2. [FPDF] Accents non pris en compte dans mes PDF
    Par beegees dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 12/05/2009, 13h28
  3. Attribut font-size non pris en compte dans un tableau
    Par malta dans le forum Mise en page CSS
    Réponses: 10
    Dernier message: 20/09/2008, 13h58
  4. index non pris en compte dans inner select
    Par eponette dans le forum SQL
    Réponses: 2
    Dernier message: 12/11/2007, 12h47
  5. Accents non pris en compte dans les requêtes SELECT
    Par YanK dans le forum Requêtes
    Réponses: 1
    Dernier message: 30/08/2005, 10h57

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