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 30/08/2011, 16h32   #1
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 29
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2011
Messages : 29
Points : 29
Points : 29
Par défaut Requête imbriquée avec valeurs sans correspondance

Bonjour,
Est il possible d'assigner une valeur par défaut aux aux variables qui ne pourront être liées a aucune valeur lors d'une requête imbriquée ?

Je m'explique.

J'ai deux tables, une contenant les absences d'employer et leur noms ainsi que le type d'absence contenu sous la forme d'un int lié a une autre table.
Or dans la seconde table les id d'absence vont de 1 a 10 mais comme le programme a originellement été mal conçue j'ai des int allant jusqu’à 20 dans la première.

Est il donc possible de faire une requête qui prendra les valeurs correspondant aux int inférieurs a 10 et de, par exemple, renvoyer "autre" pour ceux sans correspondance ?

Merci de porter intérêt à mon problème car la je n'obtient qu'un quart des résultat a cause de ce problème et cela m’empêche de poursuivre le développement de cette application pour ma boite.
Arofu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 19h35   #2
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
Bonjour Arofu,

Je te suggère de fureter vers la fonction VraiFaux(TonChampCible est Null ; "autre" ; TonChampCible).
__________________
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 déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/08/2011, 19h57   #3
Membre Expert
 
Inscription : avril 2006
Messages : 1 318
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 318
Points : 1 586
Points : 1 586
bonjour,

c'est relativement simple, il faut rajouter les id manquants dans la deuxième table avec le libellé "Autre"....

Sinon, dans la requete faire une liaison LEFT JOIN entre les deux tables pour pouvoir afficher toutes les lignes de la première puis pour le libellé du type d'absence écrire dans l'interface de création de requête:
Code :
1
2
 
Type Absence: VraiFaux([LIBELLEABSENCE] Est Null;"Autre";[LIBELLEABSENCE])
Je présume ici que le champ s'appelle LIBELLEABSENCE.

Code :
1
2
 
Type Absence: Nz([LIBELLEABSENCE];"Autre")
Philippe
philben est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 08h05   #4
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 29
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2011
Messages : 29
Points : 29
Points : 29
Bonjour, merci a vous deux pour vos réponses, malheuresement je n'arrive pas à trouver ou placer cet fonction vrai faux. Est-ce dans le SELECT quand je sélectionne l'élément qui va résulter de la liaison ou dans le WHERE à la place du = pour assigner la liaison ? Dans les deux il me met opérateur manquant..

Sinon est-ce que cette méthode gère le cas ou la valeur que l'on souhaite assigner est nulle ou bien le cas ou elle n'a pas de correspondance dans l'autre table ?

Merci par avance de vos réponses.
Arofu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 10h11   #5
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
Bonjour Arofu et Philben,

Citation:
Envoyé par Arofu
Est-ce dans le SELECT .../...
==> Oui. Passes par l'assistant, il est très bien conçu.
Le LEFT JOIN correspond à la flèche orientée à droite.


Code sql :
Type Absence: VraiFaux(LIBELLEABSENCE Est NULL;"Autre";[LIBELLEABSENCE])
==> Type Absence est le nom que tu donnes au champ calculé (AS). VraiFaux() correspond au IIf().
Par contre, il faut remplacer "LIBELLEABSENCE" par l'Id de l'absence dans la table jointe : en effet, il pourrait y avoir des libellés=NULL alors qu'un enregistrement est présent.


Citation:
Envoyé par Arofu
Sinon est-ce que cette méthode gère le cas ou la valeur que l'on souhaite assigner est nulle ou bien le cas ou elle n'a pas de correspondance dans l'autre table ?
==> c'est pareil : si la correspondance n'est pas trouvée, alors la clé recherchée est NULL.
__________________
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 déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 11h07   #6
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 29
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2011
Messages : 29
Points : 29
Points : 29
Je suis désolé mais la je n'arrive vraiment pas a comprendre le fonctionnement de cette fonction..
J'ai codé:
Citation:
SELECT absence.type_absence: vraifaux(type_absence.id_typabsence is NULL, "Autre", type_absence.id_typabsence) FROM absence, type_absence;
Mais toujours cette erreur de "opérateur manquant"..
Absence est ma première table et type_absence est la deuxième de laquelle je veux récupérer le type d'absence en string, qui ont un id de 1 a 10.
Arofu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 11h18   #7
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
Tu n'est pas passé par l'assistant !
==> VraiFaux() de l'assistant correspond au IIf() du SQL.

Et, dans ton code, il n'y a pas de jointure !
==> LEFT JOIN.

Je te suggère de passer par l'assistant. Dans "Requête", "Nouveau" puis "Assistant requête de non-correspondance" : suit les instructions, c'est très clair.

Ensuite, tu pourras reprendre la requête générée et indiquer, via l'assistant, la fonction VraiFaux() en question.

Enfin, tu pourras jeter un coup d'oeil sur le code SQL généré par Access (qui sera correct, puisque créé par Access).
__________________
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 déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2011, 06h26   #8
Membre Expert
 
Inscription : avril 2006
Messages : 1 318
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 318
Points : 1 586
Points : 1 586
bonjour,

ci-joint un exemple :
La requête de l'exemple permet d'afficher "Autre" si le Id du type d'absence contenu dans la table absence est inconnu dans la table type_absence, sinon elle affiche le libellé correspondant.

Dans la base exemple, l'enregistrement n°6 de la table absence contient un id de type inconnu (valeur = 11) dans la table type_absence donc elle retourne "Autre".

A toi d'adapter selon le nom de tes champs.

Philippe
Fichiers attachés
Type de fichier : zip TypeAbsence.zip (22,3 Ko, 2 affichages)
philben 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 15h04.


 
 
 
 
Partenaires

Hébergement Web