Requête : comptage conditionnel sur plusieurs critères
6 réponses
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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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 !
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 !
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
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".
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])=1993,1,0))),"C'est
null"), et la valeur renvoyée est 27, et pas "C'est null".
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
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 ?
"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 ?
"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 ?
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 !
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 ?
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
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 ;-)