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

Requêtes et SQL. Discussion :

Modifier résultats requête selon valeur contrôle formulaire


Sujet :

Requêtes et SQL.

  1. #1
    Membre éclairé Avatar de stéphane_ais2
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 792
    Points : 891
    Points
    891
    Par défaut Modifier résultats requête selon valeur contrôle formulaire
    Bonjour,

    J'essaie à partir d'une requête d'obtenir des résultats selon les valeurs de contrôle d'un formulaire.

    Le formulaire se nomme : F_REPORTING

    Le contrôle du frm : ShpInterventions. Il s'agit d'un cadre d'options avec 7 valeurs possibles.

    Je teste avec cette requête si la valeur 1 est choisie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT T_RC_AGENCE_CAISSE.Reseau_Groupe AS Réseau, T_RC_INTERVENTION.Num_Affaire, T_RC_INTERVENTION.Nature_Intervention, T_RC_AGENCE_CAISSE.Nom_Agence_Caisse, T_RC_INTERVENTION.Date_Reception_DAEC
    
    FROM (T_RC_AGENCE_CAISSE RIGHT JOIN T_RC_AFFAIRE ON T_RC_AGENCE_CAISSE.Code_Agence_Caisse = T_RC_AFFAIRE.Code_Agence_Caisse) RIGHT JOIN T_RC_INTERVENTION ON T_RC_AFFAIRE.Num_Affaire = T_RC_INTERVENTION.Num_Affaire
    
    GROUP BY T_RC_AGENCE_CAISSE.Reseau_Groupe, T_RC_INTERVENTION.Num_Affaire, T_RC_INTERVENTION.Nature_Intervention, T_RC_AGENCE_CAISSE.Nom_Agence_Caisse, T_RC_INTERVENTION.Date_Reception_DAEC
    
    HAVING (((T_RC_AGENCE_CAISSE.Reseau_Groupe)<>"") AND ((T_RC_INTERVENTION.Nature_Intervention)=Switch([Forms]![F_REPORTING]![ShpInterventions].[value]=1,([T_RC_INTERVENTION].[Nature_Intervention])="Cotation AN" Or ([T_RC_INTERVENTION].[Nature_Intervention])="Etude AN sur projet Région")) AND ((T_RC_AGENCE_CAISSE.Nom_Agence_Caisse)<>"Direct") AND ((T_RC_INTERVENTION.Date_Reception_DAEC) Between [Forms]![F_REPORTING]![TxtDebut] And [Forms]![F_REPORTING]![TxtFin]))
    
    ORDER BY T_RC_AGENCE_CAISSE.Reseau_Groupe, T_RC_AGENCE_CAISSE.Nom_Agence_Caisse;
    Je n'obtiens aucun résultat et c'est lié à mon critère que j'ai surligné en vert dans le code SQL.

    Une idée...? la fonction 'Switch' est-elle adaptée?

    Merci par avance

    SE

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 368
    Points
    34 368
    Par défaut
    bonjour, je ne crois pas que la fonction switch fonctionne. Tu devrais voir la fonction IIF() à mon avis

  3. #3
    Membre éclairé Avatar de stéphane_ais2
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 792
    Points : 891
    Points
    891
    Par défaut
    Merci pour ta réponse.

    J'ai testé avec 'IIF()'...j'ai un message d'erreur sur la complexité de l'expression trop difficile à évaluer ou quelque chose en substance.

    Je me demande si le problème n'est pas lié au "double critère" car cela fonctionne avec un critère simple.

    SE

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 368
    Points
    34 368
    Par défaut
    as-tu l'algorithme ou l'équivalent "boucles if/else/end if" qu'on puisse avoir une idée de ce que le iif peut apporter ?

  5. #5
    Membre éclairé Avatar de stéphane_ais2
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 792
    Points : 891
    Points
    891
    Par défaut
    Citation Envoyé par jpcheck Voir le message
    as-tu l'algorithme ou l'équivalent "boucles if/else/end if" qu'on puisse avoir une idée de ce que le iif peut apporter ?
    Je ne comprends pas ta question. De quoi s'agit-il?

    SE

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 368
    Points
    34 368
    Par défaut
    Lol, que cherches-tu à faire avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ((T_RC_INTERVENTION.Nature_Intervention)=Switch([Forms]![F_REPORTING]![ShpInterventions].[value]=1,([T_RC_INTERVENTION].[Nature_Intervention])="Cotation AN" Or ([T_RC_INTERVENTION].[Nature_Intervention])="Etude AN sur projet Région")) AND ((T_RC_AGENCE_CAISSE.Nom_Agence_Caisse)<>"Direct") AND ((T_RC_INTERVENTION.Date_Reception_DAEC) Between [Forms]![F_REPORTING]![TxtDebut] And [Forms]![F_REPORTING]![TxtFin]))
    ?

  7. #7
    Membre éclairé Avatar de stéphane_ais2
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 792
    Points : 891
    Points
    891
    Par défaut
    Je cherche à partir d'un formulaire à sélectionner des enregistrements selon des critères utilisateurs pour alimenter des tableaux de bord (graph et tableaux stat).
    Exemple :
    Valeur 1 du groupe d'options = Affaires nouvelles

    Cett valeur n'est pas stockée dans la table et elle correspond à la valeur 'Cotation AN' ou 'Etude AN sur projet Région' de l'attribut 'Nature_Intervention' de la table T_RC_INTERVENTION


    SE

  8. #8
    Membre éclairé Avatar de stéphane_ais2
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 792
    Points : 891
    Points
    891
    Par défaut
    Je pense avoir trouvé la solution en ajoutant un champ 'Expression' avec des IIF() imbriqués dans la requête selon ce modèle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T_RC_AGENCE_CAISSE.Reseau_Groupe AS Réseau, T_RC_INTERVENTION.Num_Affaire, T_RC_INTERVENTION.Nature_Intervention, T_RC_AGENCE_CAISSE.Nom_Agence_Caisse, T_RC_INTERVENTION.Date_Reception_DAEC, 
    IIf([Nature_Intervention]="Cotation AN","AN",IIf([Nature_Intervention]="Etude AN sur projet Région","AN",IIf([Nature_Intervention]="Cotation AVT (hors renouvellement)","AVT",IIf([Nature_Intervention]="Etude AVT sur projet Région","AVT")))) AS [Type Affaire]FROM (T_RC_AGENCE_CAISSE RIGHT JOIN T_RC_AFFAIRE ON T_RC_AGENCE_CAISSE.Code_Agence_Caisse = T_RC_AFFAIRE.Code_Agence_Caisse) RIGHT JOIN T_RC_INTERVENTION ON T_RC_AFFAIRE.Num_Affaire = T_RC_INTERVENTION.Num_Affaire
    GROUP BY T_RC_AGENCE_CAISSE.Reseau_Groupe, T_RC_INTERVENTION.Num_Affaire, T_RC_INTERVENTION.Nature_Intervention, T_RC_AGENCE_CAISSE.Nom_Agence_Caisse, T_RC_INTERVENTION.Date_Reception_DAEC, IIf([Nature_Intervention]="Cotation AN","AN",IIf([Nature_Intervention]="Etude AN sur projet Région","AN",IIf([Nature_Intervention]="Cotation AVT (hors renouvellement)","AVT",IIf([Nature_Intervention]="Etude AVT sur projet Région","AVT"))))HAVING (((T_RC_AGENCE_CAISSE.Reseau_Groupe)<>"") AND ((T_RC_AGENCE_CAISSE.Nom_Agence_Caisse)<>"Direct") AND ((T_RC_INTERVENTION.Date_Reception_DAEC) Between [Forms]![F_REPORTING]![TxtDebut] And [Forms]![F_REPORTING]![TxtFin]) AND ((IIf([Nature_Intervention]="Cotation AN","AN",IIf([Nature_Intervention]="Etude AN sur projet Région","AN",IIf([Nature_Intervention]="Cotation AVT (hors renouvellement)","AVT",IIf([Nature_Intervention]="Etude AVT sur projet Région","AVT")))))=Switch([Forms]![F_REPORTING]![ShpInterventions].[value]=1,"AN",2,"AVT")))
    ORDER BY T_RC_AGENCE_CAISSE.Reseau_Groupe, T_RC_AGENCE_CAISSE.Nom_Agence_Caisse;
    Cela permet de 'critériser' sur un seul critère avec 'Switch()' et ça fonctionne.

    SE

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

Discussions similaires

  1. [AC-2007] Afficher le résultat d'une requête selon un formulaire
    Par lipix dans le forum Access
    Réponses: 2
    Dernier message: 18/07/2012, 11h10
  2. Modifier la requête selon la valeur d'un argument
    Par jubourbon dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/06/2010, 17h37
  3. Réponses: 6
    Dernier message: 05/03/2010, 08h22
  4. Réponses: 1
    Dernier message: 29/09/2005, 12h05
  5. Récupérer valeur contrôle en dynamique via requête
    Par nicburger dans le forum Access
    Réponses: 10
    Dernier message: 15/09/2005, 15h41

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