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 :

Simplification d'une requête SQL


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier Avatar de nicou50
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 131
    Points : 80
    Points
    80
    Par défaut Simplification d'une requête SQL
    Bonjour, j'ai une requête qui semble trop compliqué pour access. Il me dit que je dois simplifier l'expression ( en déclarant des variables par exemple ), mais je ne sais pas comment faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT T_Facture.NoClient, Month([T_Facture].[DateFacture]) AS Expr1, Sum(T_Facture.TotalFacture) AS TotalMoisPrecedent
    FROM T_Facture
    GROUP BY T_Facture.NoClient, Month([T_Facture].[DateFacture])
    HAVING (((Month([T_Facture].[DateFacture]))<=IIf(Month([Formulaires].[F_ListePaiement].[Mois]) Is Not Null,Month(DateAdd("d",-(Day([Formulaires].[F_ListePaiement].[Mois])+1),[Formulaires].[F_ListePaiement].[Mois])),Month([T_Facture].[DateFacture]))));
    Ma requête fonctionne très bien lorsque je rentre une date ( autrement dit, toute la partie DateAdd... est bien exécutée.) Mais il n'arrive pas à faire la dernière partie de mon iif ( qui intervient lorsque je n'entre pas de date )

    Lorsque je dis, entrer une date, c'est seulment pour mes tests. Dans le code, il s'agit de [Formulaires].[F_ListePaiement].[Mois] qui correspond à une date provenant d'un formulaire.
    Comment faire ?

  2. #2
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 273
    Points : 258
    Points
    258
    Par défaut
    Si tu essayes sans le IIF avec directement Month([T_Facture].[DateFacture]) ca marche normalement aussi?
    C'est bizarre qu'il bloque... c'est juste un IIF ou alors c'est qu'il n'arrive pas a calculer la 2eme partie du IIF (dateadd...) car si je ne souviens bien, dans un IIF, il calcule toutes les possibilites et ensuite il choisit la bonne donc pour peu qu'il n'arrive pas a la calculer...

  3. #3
    Membre régulier Avatar de nicou50
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 131
    Points : 80
    Points
    80
    Par défaut il arrive à la calculer
    Je pense qu'il arrive à la calculer puisque lorsque je rentre une date ( à la place du formulaire ), il arrive à me sélectionner les bons enregistrements. Parce qu'en gros, dans mon iif, il ya trois parties :
    iif( si la date provenant du formulaire est pas null ; alors tu fais l'opération avec le dateAd ; sinon tu fais month(datefacture) )

    en résumé, quand je rentre la date, donc la date n'est pas null, il me fait bien l'opération avec le dateAd. Mais si je ne rentre rien, il n'arrive pas à faire la dernière action ( le sinon ) sous pretexte que mon opération est trop compliquée.

    Comment la simplifier ?

  4. #4
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 273
    Points : 258
    Points
    258
    Par défaut
    En fait il faut verifier dans le forum mais quand on lui met un IIF (condition, valeur si c'est vrai, valeur si c'est faux), il calcule la valeur si c'est vrai, la valeur si c'est faux, et ensuite suivant la condition il met la bonne... Le probleme c'est que comme il essaye de calculer les 2 valeurs meme si la condition n'est pas verifiee, il n'y arrive pas toujours!

    Par exemple la il va essayer de calculer le Month(DateAdd("d",-(Day([Formulaires].[F_ListePaiement].[Mois])+1),[Formulaires].[F_ListePaiement].[Mois]))

    Or le [Formulaires].[F_ListePaiement].[Mois] est null (mais ca il ne le sait pas encore) donc il n'arrive pas a faire le dateadd

    Essaye avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Month(DateAdd("d",-(Day([Formulaires].[F_ListePaiement].[Mois])+1),nz([Formulaires].[F_ListePaiement].[Mois],Now())))
    Comme ca si c'est nul il essayera de calculer la valeur avec Now() et il n'aura pas de probleme, et on s'en fiche de la valeur puisque de toute maniere il prendra l'autre

  5. #5
    Membre régulier Avatar de nicou50
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 131
    Points : 80
    Points
    80
    Par défaut GRRRRRRrrrr.....

    Ça me fait la même chose!
    Pourtant, ce que tu me propose est très logique...
    pourquoi ça ne marche pas ?

    Il me mets un message où il me conseille d'assigner la valeur complexe dans une variable pour alléger le code. Mais je ne vois pas comment faire non plus...
    J'apprécie beaucoup ton coup de main ( et les multiples que tu m'a donnés )

  6. #6
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 273
    Points : 258
    Points
    258
    Par défaut
    J'avais oublie un autre [Formulaires].[F_ListePaiement].[Mois] est-ce que tu l'as change dans le 2eme argument de dateadd aussi? En tout cas j'espere que c'est ca parce qu'apres je suis a cours d'idees Ah et puis de rien pour l'aide, y a personne sur le forum a cette heure ci donc c'est un peu ennuyeux, je fais le service de nuit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Month(DateAdd("d",-(Day(nz([Formulaires].[F_ListePaiement].[Mois],Now()))+1),nz([Formulaires].[F_ListePaiement].[Mois],Now())))

  7. #7
    Membre régulier Avatar de nicou50
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 131
    Points : 80
    Points
    80
    Par défaut T'es Un Génie!!!!!!!!!!!!!!!!!!!!!Ça marche!




    Dès que j'ai un problème maintenant, je fais appel à toi...lol

  8. #8
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 273
    Points : 258
    Points
    258
    Par défaut
    Hehe mais que pour les ptits problemes hein? parce que sinon je saurai pas repondre et tu me mettras plus sur piedestal

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

Discussions similaires

  1. Pb sur une requête SQL (de champ vide)
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/07/2004, 11h12
  2. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  3. Récupurer via une requête SQL la valeur la plus proche
    Par yoda_style dans le forum Langage SQL
    Réponses: 9
    Dernier message: 27/04/2004, 13h52
  4. Résultat d'une requète SQL
    Par camino dans le forum Bases de données
    Réponses: 2
    Dernier message: 21/02/2004, 15h22
  5. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26

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