Requête : comptage conditionnel sur plusieurs critères

Le
moromain
Bonjour,

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])=1993,1,0)) AS 1993,
Count(IIf(Year([date])=1994,1,0)) AS 1994,
Count(IIf(Year([date])=1995,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=27 ; 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])=1995,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 !
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Tisane
Le #6295731
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 !

moromain
Le #6295691
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".
3stone
Le #6295531
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)
moromain
Le #6295481
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 !
3stone
Le #6295281
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)

moromain
Le #6295151
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 !).
Publicité
Poster une réponse
Anonyme