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 22/11/2011, 11h52   #1
Membre habitué
 
Inscription : octobre 2003
Messages : 483
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : octobre 2003
Messages : 483
Points : 136
Points : 136
Par défaut Obliger fonction "compte" dans requête à retourner 0

Bonjour,

Est-il possible de faire en sorte qu'une requête qui compte des éléments dans une table retourne une valeur nulle même si elle ne trouve aucun élément ?

Exemple ;
Compter les factures de type "photo" dans une table et retourner 0 même si aucun élément n'est trouvé ?

Merci pour vos conseils !!
lio33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 13h20   #2
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 256
Points : 5 256
Salut,

Normalement, dans une requête, la fonction de regroupement "Count" renvoie 0 si aucun élément n'a été trouvé...

Peux-tu poster le sql de ta requête ?

A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 14h11   #3
Membre habitué
 
Inscription : octobre 2003
Messages : 483
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : octobre 2003
Messages : 483
Points : 136
Points : 136
La voici :

Code :
1
2
3
4
SELECT T_TACHE_BFCFAO_TYPE.TYPE_NOM AS TypeActionBFCFAO, Count(T_ACTIONS_BFCFAO.Action_ID_Statut) AS NbreType
FROM T_ACTIONS_BFCFAO INNER JOIN T_TACHE_BFCFAO_TYPE ON T_ACTIONS_BFCFAO.Action_Type = T_TACHE_BFCFAO_TYPE.ID
WHERE (((T_ACTIONS_BFCFAO.Action_Date_Saisie)>=#11/1/2011#))
GROUP BY T_TACHE_BFCFAO_TYPE.TYPE_NOM;
Merci pour ton intérêt.
lio33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 14h21   #4
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 256
Points : 5 256
Salut,

Il faut utiliser left join:

Code sql :
1
2
3
4
SELECT T_TACHE_BFCFAO_TYPE.TYPE_NOM AS TypeActionBFCFAO, Count(T_ACTIONS_BFCFAO.Action_ID_Statut) AS NbreType
FROM T_TACHE_BFCFAO_TYPE LEFT JOIN  T_ACTIONS_BFCFAO ON T_ACTIONS_BFCFAO.Action_Type = T_TACHE_BFCFAO_TYPE.ID
WHERE (((T_ACTIONS_BFCFAO.Action_Date_Saisie)>=#11/1/2011#))
GROUP BY T_TACHE_BFCFAO_TYPE.TYPE_NOM;

A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 14h46   #5
Membre habitué
 
Inscription : octobre 2003
Messages : 483
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : octobre 2003
Messages : 483
Points : 136
Points : 136
Cela ne change rien.
C'est ce que j'avais mis par défaut dans ma relation.

J'avais aussi essayé RIGHT JOIN pensant que cela me donnerait par défaut tous les éléments de ma table T_TACHE_BFCFAO_TYPE avec des valeurs nulles si aucune correspondance.

Mais quelque soit la relation je n'obtiens pas de nul en sortie.

Avec des fonctions VraiFaux() sur une des colonnes peut-on imposer une valeur de retour nulle ?
lio33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 14h49   #6
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 256
Points : 5 256
2 questions :

1- Quand tu parles de valeurs nulles, tu veux dire égales à 0 ?

2- Quand tu dis "aucunes correspondances", tu veux dire qui ne satisfasse pas le critère :

Code :
(T_ACTIONS_BFCFAO.Action_Date_Saisie)>=#11/1/2011#
?

A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 14h58   #7
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 256
Points : 5 256
Si c'est le cas alors,

Il faudrait faire une sous requête:

Code sql :
1
2
3
SELECT *
FROM T_ACTIONS_BFCFAO 
WHERE (((T_ACTIONS_BFCFAO.Action_Date_Saisie)>=#11/1/2011#))


Que tu nommes, par exemple, "R_ACTIONS_BFCFAO" et ensuite faire ta requête principale:

Code sql :
1
2
3
SELECT T_TACHE_BFCFAO_TYPE.TYPE_NOM AS TypeActionBFCFAO, Count(R_ACTIONS_BFCFAO.Action_ID_Statut) AS NbreType
FROM T_TACHE_BFCFAO_TYPE LEFT JOIN  R_ACTIONS_BFCFAO ON R_ACTIONS_BFCFAO.Action_Type = T_TACHE_BFCFAO_TYPE.ID
GROUP BY T_TACHE_BFCFAO_TYPE.TYPE_NOM;

A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/11/2011, 15h03   #8
Membre habitué
 
Inscription : octobre 2003
Messages : 483
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : octobre 2003
Messages : 483
Points : 136
Points : 136
1. Oui valeurs égales à 0 (pour moi cela serait l'idéal)
2. Oui bien sûr, compte tenu du critère de date (en fait en réalité je teste un intervalle de date, mais cela ne modifie en rien mon petit problème).

Cette requête alimente en fait un graphe (barres). Quand aucune correspondance n'est trouvée dans la table, compte tenu des critères, le graphe ne s'affiche pas, ce qui n'est pas trés beau !
Je préfèrerais une barre à 0.

Évidemment je peux procéder autrement, en utilisant une table temporaire dans laquelle je mettrai le résultat de ma requête et donc la valeur 0 si résultat NULL.
lio33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 15h48   #9
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 184
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 184
Points : 2 814
Points : 2 814
Bonjour Lio33 et Denis,

Je me permets de m'immiscer...

Via l'assistant :
  • T_TACHE_BFCFAO_TYPE liée à T_ACTIONS_BFCFAO, avec flèche à droite (LEFT JOIN) ;
  • Critères : T_ACTIONS_BFCFAO.Action_Date_Saisie>=01/11/2011 ou R_ACTIONS_BFCFAO.Action_Type Est Null (pas de correspondance).
En supposant que T_TACHE_BFCFAO_TYPE est la liste exhaustive des types.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 19h22   #10
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 447
Points : 4 447
bonsoir à tous,

Citation:
Envoyé par User Voir le message
Il faut utiliser left join:

Code sql :
1
2
3
4
SELECT T_TACHE_BFCFAO_TYPE.TYPE_NOM AS TypeActionBFCFAO, Count(T_ACTIONS_BFCFAO.Action_ID_Statut) AS NbreType
FROM T_TACHE_BFCFAO_TYPE LEFT JOIN  T_ACTIONS_BFCFAO ON T_ACTIONS_BFCFAO.Action_Type = T_TACHE_BFCFAO_TYPE.ID
WHERE (((T_ACTIONS_BFCFAO.Action_Date_Saisie)>=#11/1/2011#))
GROUP BY T_TACHE_BFCFAO_TYPE.TYPE_NOM;
effectivement, comme je (tente de) l'explique(r) ici, une jointure LEFT avec un critère sur un champ de la table de droite est équivalent à une jointure INNER.

Il faut donc passer soit par la sous-requête de User dans son message #7, soit glisser le critère dans la condition de jointure ON:

Code sql :
1
2
3
...FROM T_TACHE_BFCFAO_TYPE LEFT JOIN  T_ACTIONS_BFCFAO
 ON (T_ACTIONS_BFCFAO.Action_Type = T_TACHE_BFCFAO_TYPE.ID
               AND T_ACTIONS_BFCFAO.Action_Date_Saisie>=#11/1/2011#)...
Dans ce cas précis, on risque de faire exploser le QBE d'Access qui ne sait pas interpréter ce genre de jointures en supposant qu'Access la supporte, à tester.
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h12.


 
 
 
 
Partenaires

Hébergement Web