Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Requête : comptage conditionnel sur plusieurs critères

6 réponses
Avatar
moromain
Bonjour,

Je souhaite r=E9cup=E9rer le nombre de donn=E9es disponibles par ann=E9es
(1993, 1994, 1995...). J'utilise une requ=EAte avec count et iif, comme
dans le code ci-apr=E8s :

SELECT R_ChercheDonneesDispo.Station,
Count(IIf(Year([date])=3D1993,1,0)) AS 1993,
Count(IIf(Year([date])=3D1994,1,0)) AS 1994,
Count(IIf(Year([date])=3D1995,1,0)) AS 1995
FROM (T_BV INNER JOIN T_Riviere ON T_BV.NomBV =3D
T_Riviere.NomBVRiviere)
INNER JOIN (R_ChercheDonneesDispo INNER JOIN T_Station ON
R_ChercheDonneesDispo.Station =3D T_Station.NumStation) ON
T_Riviere.Riviere =3D T_Station.RiviereStation
GROUP BY R_ChercheDonneesDispo.Station;

Dans cet exemple, il n'y a aucune donn=E9es en 1993 et 1995. Et 27 pour
1994.
Je pensais obtenir :
1993=3D0 ; 1994=3D27 ; 1995 =3D 0
Le code fonctionne, sauf que j'ai 27 donn=E9es affich=E9es disponibles
pour les 3 ann=E9es.

J'ai v=E9rifier sans compter : IIf(Year([date])=3D1995,True,False).
Et l=E0, =E7a marche : 1993 : 0 ; 1994 : -1 (true) ; 1995 : 0

Quelqu'un aurait une id=E9e de l'erreur de syntaxe ?
Merci d'avance !

6 réponses

Avatar
Tisane
Bonjour "moromain",

Dans cet exemple, il n'y a aucune données en
1993 et 1995. Et 27 pour 1994.
Je pensais obtenir :
1993=0 ; 1994' ; 1995 = 0


Dès lors que tu effectues une opération avec des valeurs susceptibles d'être
nulles, il faut ajouter la fonction nz() ("null en zéro" ou autrement dit,
remplacer null par 0).
nz(Count(...

--
Tisane



Je souhaite récupérer le nombre de données disponibles par années
(1993, 1994, 1995...). J'utilise une requête avec count et iif, comme
dans le code ci-après :

SELECT R_ChercheDonneesDispo.Station,
Count(IIf(Year([date])93,1,0)) AS 1993,
Count(IIf(Year([date])94,1,0)) AS 1994,
Count(IIf(Year([date])95,1,0)) AS 1995
FROM (T_BV INNER JOIN T_Riviere ON T_BV.NomBV T_Riviere.NomBVRiviere)
INNER JOIN (R_ChercheDonneesDispo INNER JOIN T_Station ON
R_ChercheDonneesDispo.Station = T_Station.NumStation) ON
T_Riviere.Riviere = T_Station.RiviereStation
GROUP BY R_ChercheDonneesDispo.Station;

Dans cet exemple, il n'y a aucune données en 1993 et 1995. Et 27 pour
1994.
Je pensais obtenir :
1993=0 ; 1994' ; 1995 = 0
Le code fonctionne, sauf que j'ai 27 données affichées disponibles
pour les 3 années.

J'ai vérifier sans compter : IIf(Year([date])95,True,False).
Et là, ça marche : 1993 : 0 ; 1994 : -1 (true) ; 1995 : 0

Quelqu'un aurait une idée de l'erreur de syntaxe ?
Merci d'avance !

Avatar
moromain
Pas mieux !
Au lieu que mes données soient à droite (comme des chiffres), elles
sont à gauche (comme des lettres).
C'est tout ce que ça change !
La valeur 27 est toujours conservée pour les 3 années.
Apparemment, la valeur renvoyée n'est pas Null.
J'ai testé ceci : nz((Count(IIf(Year([date])93,1,0))),"C'est
null"), et la valeur renvoyée est 27, et pas "C'est null".
Avatar
3stone
Salut,

"moromain"
Au lieu que mes données soient à droite (comme des chiffres), elles
sont à gauche (comme des lettres).
C'est tout ce que ça change !
La valeur 27 est toujours conservée pour les 3 années.
Apparemment, la valeur renvoyée n'est pas Null.
J'ai testé ceci : nz((Count(IIf(Year([date])93,1,0))),"C'est
null"), et la valeur renvoyée est 27, et pas "C'est null".



Oui, mais tu comptes...
en faisant un Sum() cela devrait le faire, non ?

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
moromain
Miracles de la technologie !
En fait Count fonctionne très bien. Qu'ai-je fait ? Je sais pas !
Je suis revenu sur la requête pour tester sum, et en la lançant, ça
marchait.
J'ai compacté la base, ça a peut-être joué en ma faveur.

Pour Pierre : est-ce que "sum" est indiqué si on a des données
textes ? Je ne pense pas, et donc "count" est plus indiqué. Non ?

En tout cas, merci pour les avis... avisés !
Avatar
3stone
Salut,

"moromain"
Pour Pierre : est-ce que "sum" est indiqué si on a des données
textes ? Je ne pense pas, et donc "count" est plus indiqué. Non ?



Ta ligne :
nz((Count(IIf(Year([date])93,1,0))),"C'est null")


Si l'on considère que : iif(Year([ladate])93,1,0)
renvoie soit 1 si [ladate] est égale à 1993, sinon 0 (zéro)

Faire un count ramène simplement... toutes les lignes
Or, si tu demande le nombre de '1993' tu doit faire la somme
de ce que renvoi le iif()

Nz() ne sert ici à rien, puisque le iif() renvoie 1 ou 0


Maintenant, si tu dis que cela marche, c'est effectivement un miracle ;-)

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)

Avatar
moromain
Aïe aïe aïe ! Du divin dans Access !!!

Merci pour ta remarque !
Je vais peut-être modifié pour plus tard (pour éviter toute
diablerie !).