IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

Sélection conditionnelle d'un champ dans une requête?


Sujet :

Access

  1. #1
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut Sélection conditionnelle d'un champ dans une requête?
    Bonjour,
    voici mon problème:
    j'ai stockée dans une table temporaire les enregistrements de ma base pour sur une tranche de dates entrées par l'utilisateur;
    Ensuite une requête analyse croisée,effectuée sur cette table me donne pour la période sélectionnée:
    - en ligne les noms de commerciaux
    - en colonne les états des devis correspondant aux affaires qu'ils ont réalisés (en attente, annulé, refusé ou conclus) avec pour chacune de ces possibilités le nombre de devis de chaque type pour chacun des commerciaux.

    Le but est en suite de réaliser un état sous forme de petit tableau bilan, avec une colonne me calculant les statistiques de réussite de chacun (soit la formule: (Nombre devis conclus/nombre devis total)*100.
    J'ai donc créé la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT [NomVendeur],[en attente],[conclu],[annulé],[refusé], ((nz([conclu],0))/(nz([conclu],0)+nz([en attente],0)+nz([annulé],0)+nz([refusé],0))*100 FROM AnalyseCroisée
    Cette requête fonctionne parfaitement, mais j'ai un petit problème:
    si sur la tranche de date entrée par l'utilisateur il n'y a par exemple aucun devis annulé, je n'ai pas de colonne [annulé] dans le résultat de ma requête analyse croisée.
    Quand j'exécute la requête suivante, qui essaie de me sélectionner les champs [annulé] de ma table temporaire, j'obtiens alors le message "le moteur de la base de données Microsoft Jet ne reconnaît pas [annulé] en tant que nom de champ ou expression correcte", puisque ce champ n'existe même pas!
    Dans les cas ou sur la tranche de dates étudiées tous les types de devis sont représentés, la requête fonctionne et j'obtiens le résultat désiré.
    J'aimerais donc savoir:
    -s'il est possible de préciser dans une requête que la sélection du champ ne se fasse que s'il existe?
    -si pas possible comment m'y prendre?
    Merci d'avance pour votre aide

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    tu peux forcer le champ annulé à apparaître
    pour cela en mode création tu clic droit ailleurs que sur les champs
    pour accèder aux propriétes de la requête

    là dans la zone en-têtes de colonne tu tapes dans l'ordre ce que tu veux
    "éxécutés";"annulées"

    tu aura toujours une colonne annulée dont tu esteras avec isnull la valeur avant de poursuivre
    Elle est pas belle la vie ?

  3. #3
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par random
    tu peux forcer le champ annulé à apparaître
    pour cela en mode création tu clic droit ailleurs que sur les champs
    pour accèder aux propriétes de la requête

    là dans la zone en-têtes de colonne tu tapes dans l'ordre ce que tu veux
    "éxécutés";"annulées"

    tu aura toujours une colonne annulée dont tu esteras avec isnull la valeur avant de poursuivre
    S'il est possible de "forcer" le champ à apparaître alors c'est exactement ce qu'il me faut, par contre je ne suis pas arrivé à le faire comme sur ton explication: tu parles de faire un clci droit pour faire apparaître les propriétés de la requête et ça m'ouvre la boite de propriétés suivante


    Hors dans cette zone il n'y a aucun champ en tête de colonne comme tu le décris, ou dois-je mettre le nom de mes champs?
    J'ai essayé de rajouter directement dans ma requête les données sur le champ [annulé] pour tester (est-ce ça que tu me disais?):

    et j'obtiens à nouveau le message d'erreur "le moteur de la base de données Microsoft Jet ne reconnaît pas [annulé] en tant que nom de champ ou expression correcte".

    Dans le pire des cas je peux toujours utiliser une table supplémentaire contenant tous les champs possibles avec une valeur par défaut, et remplir cette table par une requête ajout sur le résultat de ma requête analyse croisée, mais cela me ferait 4 requêtes + 2 tables intermédiaires juste pour effectuer ce petit calcul statistique,et ça fait un peu gros je trouve.

  4. #4
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Salut,
    Remplace par

  5. #5
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par Kikof
    Salut,
    Remplace par
    Pas du tout ça me donne à présent un message "référence circulaire causée par l'alias 'annulé' dans la liste SELECT de la définition de la requête".

  6. #6
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Et si tu supprimes Expr1.... et que tu mets simplement annulé parce que à priori il ne sert pas.

  7. #7
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par Kikof
    Et si tu supprimes Expr1.... et que tu mets simplement annulé parce que à priori il ne sert pas.
    De toutes façons le problème ne vient pas de là, car en fait Expr1 est rajouté tout seul par Access (au début j'ai tout simplement mis annulé sans aucun nom de variable)...

  8. #8
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Il y a un exemple qui peut t'être utile... (j'ai relu ton post avec attention...)
    va dans la base Solution.mdb livrée avec access, il y a un exemple d'état basé sur une requête croisée avec des champs qui change tout le temps.
    L'état s'appelle "Vente des employés".
    Je l'utilise pour ma part sur des échéances qui changes régulièrement et je n'ai aucun soucis.

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    pour voir apparaitre les en tetes il faut se mettre an analyse croisé
    cela se traduit en sql par

    PIVOT matable.monchamp In ("un","deux");
    Elle est pas belle la vie ?

  10. #10
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par random
    pour voir apparaitre les en tetes il faut se mettre an analyse croisé
    cela se traduit en sql par

    PIVOT matable.monchamp In ("un","deux");
    OK! Je pensais que je devais faire cela dans la requête qui sélectionnait les enregistrements de ma requête analyse croisée,et non pas dansz la requête analyse croisée elle-même (enfin je me comprend).
    ça fonctionne Merci beaucoup ;-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Nombre de champs dans une requête de sélection
    Par 30avril1989 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 02/06/2010, 01h16
  2. Tester l'existence d'un champ dans une requête
    Par Reidid dans le forum Access
    Réponses: 3
    Dernier message: 23/01/2006, 22h02
  3. Pb de type de champs dans une requête
    Par djouahra.karim1 dans le forum Bases de données
    Réponses: 5
    Dernier message: 23/05/2005, 15h19
  4. Changement valeur d'un champ dans une requête
    Par Mimile28 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/04/2005, 14h28
  5. [SQL] Renommer un champ dans une requête
    Par martonpylon12 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 15/11/2003, 01h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo