Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/06/2011, 14h45   #1
Invité régulier
 
Homme
Étudiant
Inscription : 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 : 9
Points : 9
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 :
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
Williamm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 15h14   #2
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
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
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 15h46   #3
Invité régulier
 
Homme
Étudiant
Inscription : 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 : 9
Points : 9
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?
Williamm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 17h05   #4
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Essaye ceci :

Code :
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;
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 18h49   #5
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
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 :
…GROUP BY "TT/Matin", T_Calendrier.Date, T_PlanningLC.Man, T_PlanningLC.Horraire

J’essaierais bien avec le regroupement :
Code sql :
GROUP  BY "TT/Matin", t_calendrier.DATE

Ce qui donnerait:
Code sql :
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
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 15h17   #6
Invité régulier
 
Homme
Étudiant
Inscription : 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 : 9
Points : 9
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
Williamm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 16h18   #7
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
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.
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2011, 15h57   #8
Invité régulier
 
Homme
Étudiant
Inscription : 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 : 9
Points : 9
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
Williamm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2011, 07h33   #9
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
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 :
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 +
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 10h08   #10
Invité régulier
 
Homme
Étudiant
Inscription : 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 : 9
Points : 9
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 :
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 :
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
Williamm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 13h03   #11
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
hé bien dans ta "pré-requête", il suffit de rajouter une condition WHERE juste avant le GROUP BY:
Code sql :
...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" )
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 14h35   #12
Invité régulier
 
Homme
Étudiant
Inscription : 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 : 9
Points : 9
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 :
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 :
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
Williamm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 19h42   #13
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
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
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 18h19   #14
Invité régulier
 
Homme
Étudiant
Inscription : 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 : 9
Points : 9
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é
Williamm est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h45.


 
 
 
 
Partenaires

Hébergement Web