OVH Cloud OVH Cloud

Count avec condition

8 réponses
Avatar
La Mouette
Bonjour!

J'ai un petit problème de requête SQL. J'ai un champ de type texte qui peut
contenir different texte. J'aimerais faire un count sur ce champ pour compter
le nombre de champ qui ont le texte "Absent". Facile à faire si on fait un
Count(Statut) WHERE statut="Absent" Mais je ne veux pas mettre la condition
sur statut sur tout la requete! Ma requête contient d'autres choses dont je
ne voudrais pas limiter les résultats à ceux qui ont des statut Absent.
En fait, le résultat donne plusieurs enregistrement, et je voudrais que ca
ecrive "0" si "Absent" apparait 0 fois.

J'ai essayer de faire Count([statut]="Absent") .. bon, ca ne fait pas
d'erreur, mais ca me retourne le même résultat que Count([statut]).

Merci beaucoup

8 réponses

Avatar
Raymond [mvp]
Bonsoir.

Je trouve ton explication un peu touffue et je n'ai pas bien compris ce que
tu voulais dans ta requête en dehors des absents.
pour compter le nombre d'enregistrements contenant le mot "absent" dans le
champ statut, dans ta requête tu peux faire ceci:
DCount("Statut", "Marequête", "[statut] like '*absent*'")
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"La Mouette" a écrit dans le message
de news:
Bonjour!

J'ai un petit problème de requête SQL. J'ai un champ de type texte qui
peut
contenir different texte. J'aimerais faire un count sur ce champ pour
compter
le nombre de champ qui ont le texte "Absent". Facile à faire si on fait un
Count(Statut) WHERE statut="Absent" Mais je ne veux pas mettre la
condition
sur statut sur tout la requete! Ma requête contient d'autres choses dont
je
ne voudrais pas limiter les résultats à ceux qui ont des statut Absent.
En fait, le résultat donne plusieurs enregistrement, et je voudrais que ca
ecrive "0" si "Absent" apparait 0 fois.

J'ai essayer de faire Count([statut]="Absent") .. bon, ca ne fait pas
d'erreur, mais ca me retourne le même résultat que Count([statut]).

Merci beaucoup


Avatar
La Mouette
Bonjour,

En fait, avec un DCount ca ne me donne pas le résultat voulu car pour chaque
enregistrement, ca me met le nombre d'absent que j'ai dans toute la table.
Alors que moi je veux le nombre d'absent associé à chaque enregistrement. Je
sais que je ne suis pas très claire... je vais vous écrire la requête
simplifié, ce seras peut être plus simple.

En gros, la requête retourne une ligne par employé avec le nombre d'heure
que la personne à fait dans l'année et le nombre de journée "Absent". Avec le
DCount, ca me retourne le nombre d'Absence pour tous les employés.

SELECT [prenom] & " " & [nom], Sum(HeureTravail.tempsFait),
Employes.idEmploye, Year([Date]), DCount("[statut]","HeureTravail","
[statut]='"&"Absent"&"'") AS ABS

FROM Employes INNER JOIN HeureTravail ON Employes.idEmploye =
HeureTravail.idEmploye

GROUP BY Employes.idEmploye

HAVING ((Year([Date]))=Year(Date()));




Bonsoir.

Je trouve ton explication un peu touffue et je n'ai pas bien compris ce que
tu voulais dans ta requête en dehors des absents.
pour compter le nombre d'enregistrements contenant le mot "absent" dans le
champ statut, dans ta requête tu peux faire ceci:
DCount("Statut", "Marequête", "[statut] like '*absent*'")
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"La Mouette" a écrit dans le message
de news:
Bonjour!

J'ai un petit problème de requête SQL. J'ai un champ de type texte qui
peut
contenir different texte. J'aimerais faire un count sur ce champ pour
compter
le nombre de champ qui ont le texte "Absent". Facile à faire si on fait un
Count(Statut) WHERE statut="Absent" Mais je ne veux pas mettre la
condition
sur statut sur tout la requete! Ma requête contient d'autres choses dont
je
ne voudrais pas limiter les résultats à ceux qui ont des statut Absent.
En fait, le résultat donne plusieurs enregistrement, et je voudrais que ca
ecrive "0" si "Absent" apparait 0 fois.

J'ai essayer de faire Count([statut]="Absent") .. bon, ca ne fait pas
d'erreur, mais ca me retourne le même résultat que Count([statut]).

Merci beaucoup







Avatar
Raymond [mvp]
tu veux le nombre associé à chaque enregistrement, ok. avant ou après le
regroupement ? ce n'est pas du tout le même calcul. je pense que tu le veux
pour chaque salarié en global . si oui il faut rajouter un élément à la
clause where:
DCount("Statut", "Marequête", "[statut] like '*absent*' And [codesalarié] =
'" & [CodeSalarié] & "'" )
si j'ai bien compris.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"La Mouette" a écrit dans le message
de news:
Bonjour,

En fait, avec un DCount ca ne me donne pas le résultat voulu car pour
chaque
enregistrement, ca me met le nombre d'absent que j'ai dans toute la table.
Alors que moi je veux le nombre d'absent associé à chaque enregistrement.
Je
sais que je ne suis pas très claire... je vais vous écrire la requête
simplifié, ce seras peut être plus simple.

En gros, la requête retourne une ligne par employé avec le nombre d'heure
que la personne à fait dans l'année et le nombre de journée "Absent". Avec
le
DCount, ca me retourne le nombre d'Absence pour tous les employés.

SELECT [prenom] & " " & [nom], Sum(HeureTravail.tempsFait),
Employes.idEmploye, Year([Date]), DCount("[statut]","HeureTravail","
[statut]='"&"Absent"&"'") AS ABS

FROM Employes INNER JOIN HeureTravail ON Employes.idEmploye > HeureTravail.idEmploye

GROUP BY Employes.idEmploye

HAVING ((Year([Date]))=Year(Date()));



Avatar
La Mouette
Bonjour!

Ca aiderais peut etre de savoir que ma requête est en fait basé sur TOUTES
les feuilles de temps que les employés ont rempli à chaque jour de toutes
l'année. À chaque feuille de temps, il y a la case statut qui est soit vide
soit "Absent" soit autre chose.

Merci!


Bonjour,

En fait, avec un DCount ca ne me donne pas le résultat voulu car pour chaque
enregistrement, ca me met le nombre d'absent que j'ai dans toute la table.
Alors que moi je veux le nombre d'absent associé à chaque enregistrement. Je
sais que je ne suis pas très claire... je vais vous écrire la requête
simplifié, ce seras peut être plus simple.

En gros, la requête retourne une ligne par employé avec le nombre d'heure
que la personne à fait dans l'année et le nombre de journée "Absent". Avec le
DCount, ca me retourne le nombre d'Absence pour tous les employés.

SELECT [prenom] & " " & [nom], Sum(HeureTravail.tempsFait),
Employes.idEmploye, Year([Date]), DCount("[statut]","HeureTravail","
[statut]='"&"Absent"&"'") AS ABS

FROM Employes INNER JOIN HeureTravail ON Employes.idEmploye =
HeureTravail.idEmploye

GROUP BY Employes.idEmploye

HAVING ((Year([Date]))=Year(Date()));




Bonsoir.

Je trouve ton explication un peu touffue et je n'ai pas bien compris ce que
tu voulais dans ta requête en dehors des absents.
pour compter le nombre d'enregistrements contenant le mot "absent" dans le
champ statut, dans ta requête tu peux faire ceci:
DCount("Statut", "Marequête", "[statut] like '*absent*'")
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"La Mouette" a écrit dans le message
de news:
Bonjour!

J'ai un petit problème de requête SQL. J'ai un champ de type texte qui
peut
contenir different texte. J'aimerais faire un count sur ce champ pour
compter
le nombre de champ qui ont le texte "Absent". Facile à faire si on fait un
Count(Statut) WHERE statut="Absent" Mais je ne veux pas mettre la
condition
sur statut sur tout la requete! Ma requête contient d'autres choses dont
je
ne voudrais pas limiter les résultats à ceux qui ont des statut Absent.
En fait, le résultat donne plusieurs enregistrement, et je voudrais que ca
ecrive "0" si "Absent" apparait 0 fois.

J'ai essayer de faire Count([statut]="Absent") .. bon, ca ne fait pas
d'erreur, mais ca me retourne le même résultat que Count([statut]).

Merci beaucoup









Avatar
3stone
Salut,

"La Mouette"
J'ai un petit problème de requête SQL. J'ai un champ de type texte qui peut
contenir different texte. J'aimerais faire un count sur ce champ pour compter
le nombre de champ qui ont le texte "Absent". Facile à faire si on fait un
Count(Statut) WHERE statut="Absent" Mais je ne veux pas mettre la condition
sur statut sur tout la requete! Ma requête contient d'autres choses dont je
ne voudrais pas limiter les résultats à ceux qui ont des statut Absent.
En fait, le résultat donne plusieurs enregistrement, et je voudrais que ca
ecrive "0" si "Absent" apparait 0 fois.

J'ai essayer de faire Count([statut]="Absent") .. bon, ca ne fait pas
d'erreur, mais ca me retourne le même résultat que Count([statut]).




Dans ta requête, tu crée un champ calculé :

Cpte: iif([statut]="Absent" ; 1 ; 0 )

Ensuite tu place un "SUM" sur ce champ... SUM([Cpte])
ce qui te donnera le nombre d'absent.



--
A+
Pierre (3stone) Access MVP
-----------------------------
http://users.skynet.be/mpfa
-----------------------------

Avatar
La Mouette
GÉNIAL!!! Ca marche avec le champ calculé, merci à vous deux.



Salut,

"La Mouette"
J'ai un petit problème de requête SQL. J'ai un champ de type texte qui peut
contenir different texte. J'aimerais faire un count sur ce champ pour compter
le nombre de champ qui ont le texte "Absent". Facile à faire si on fait un
Count(Statut) WHERE statut="Absent" Mais je ne veux pas mettre la condition
sur statut sur tout la requete! Ma requête contient d'autres choses dont je
ne voudrais pas limiter les résultats à ceux qui ont des statut Absent.
En fait, le résultat donne plusieurs enregistrement, et je voudrais que ca
ecrive "0" si "Absent" apparait 0 fois.

J'ai essayer de faire Count([statut]="Absent") .. bon, ca ne fait pas
d'erreur, mais ca me retourne le même résultat que Count([statut]).




Dans ta requête, tu crée un champ calculé :

Cpte: iif([statut]="Absent" ; 1 ; 0 )

Ensuite tu place un "SUM" sur ce champ... SUM([Cpte])
ce qui te donnera le nombre d'absent.



--
A+
Pierre (3stone) Access MVP
-----------------------------
http://users.skynet.be/mpfa
-----------------------------













Avatar
La Mouette
Est ce qu'il y a moyen de mettre le champ calcule avec le iif autre chose que
Group By? Parce que sinon ca me sépare des employés en deux!


Salut,

"La Mouette"
J'ai un petit problème de requête SQL. J'ai un champ de type texte qui peut
contenir different texte. J'aimerais faire un count sur ce champ pour compter
le nombre de champ qui ont le texte "Absent". Facile à faire si on fait un
Count(Statut) WHERE statut="Absent" Mais je ne veux pas mettre la condition
sur statut sur tout la requete! Ma requête contient d'autres choses dont je
ne voudrais pas limiter les résultats à ceux qui ont des statut Absent.
En fait, le résultat donne plusieurs enregistrement, et je voudrais que ca
ecrive "0" si "Absent" apparait 0 fois.

J'ai essayer de faire Count([statut]="Absent") .. bon, ca ne fait pas
d'erreur, mais ca me retourne le même résultat que Count([statut]).




Dans ta requête, tu crée un champ calculé :

Cpte: iif([statut]="Absent" ; 1 ; 0 )

Ensuite tu place un "SUM" sur ce champ... SUM([Cpte])
ce qui te donnera le nombre d'absent.



--
A+
Pierre (3stone) Access MVP
-----------------------------
http://users.skynet.be/mpfa
-----------------------------













Avatar
La Mouette
Ouais.. j'ai parlé trop vite.. à mon habitude, ca marche, j'avais par erreur
fait deux champs au lieu de mettre le sum directement sur le premier. :D

Merci encore


Est ce qu'il y a moyen de mettre le champ calcule avec le iif autre chose que
Group By? Parce que sinon ca me sépare des employés en deux!


Salut,

"La Mouette"
J'ai un petit problème de requête SQL. J'ai un champ de type texte qui peut
contenir different texte. J'aimerais faire un count sur ce champ pour compter
le nombre de champ qui ont le texte "Absent". Facile à faire si on fait un
Count(Statut) WHERE statut="Absent" Mais je ne veux pas mettre la condition
sur statut sur tout la requete! Ma requête contient d'autres choses dont je
ne voudrais pas limiter les résultats à ceux qui ont des statut Absent.
En fait, le résultat donne plusieurs enregistrement, et je voudrais que ca
ecrive "0" si "Absent" apparait 0 fois.

J'ai essayer de faire Count([statut]="Absent") .. bon, ca ne fait pas
d'erreur, mais ca me retourne le même résultat que Count([statut]).




Dans ta requête, tu crée un champ calculé :

Cpte: iif([statut]="Absent" ; 1 ; 0 )

Ensuite tu place un "SUM" sur ce champ... SUM([Cpte])
ce qui te donnera le nombre d'absent.



--
A+
Pierre (3stone) Access MVP
-----------------------------
http://users.skynet.be/mpfa
-----------------------------