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 :

SQL : Synthaxe sous-requete


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 177
    Par défaut SQL : Synthaxe sous-requete
    Bonjour j'ai une table Imp0604 à 3 clé primaire : IDTIEM, IDCT, NOIMP.
    Je souhaite extraire de cette table tout les champs avec les enregistrement dont :
    - DTEHEX < 13/03/2006
    - DTEHLT est NULL
    - CDSTIM <> 9
    - MTIMP > 1000 par IDTIEM (Soit la somme de MTIMP > 1000 par regroupement de IDTIEM)

    J'ulilise ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    SELECT Imp0604.IDTIEM, Imp0604.IDCT, Imp0604.NOIMP, 
    Imp0604.CTEHPR, Imp0604.DTEHPR, Imp0604.DTEHEX, Imp0604.DTCRIM,
    Imp0604.DTEHLT, Imp0604.MTIMP, Imp0604.MAEHPR, Imp0604.MTINEH, 
    Imp0604.MTPERE, Imp0604.MTEHDM, Imp0604.MTRESI, Imp0604.CDQL01, 
    Imp0604.NUECEL, Imp0604.CTIMPA, Imp0604.CDSDIM, Imp0604.CDSTIM, 
    Imp0604.CDRMIM, Imp0604.DTREMI, Imp0604.MTREMI, Imp0604.MTREMP, 
    Imp0604.DTCORE, Sum(Imp0604.MTIMP) AS SommeDeMTIMP
    FROM Imp0604
    WHERE ((Imp0604.DTEHEX)<#3/13/2006#)  
    AND ((Imp0604.DTEHLT) Is Null) 
    AND ((Imp0604.CDSTIM)<>9) 
    AND  Imp0604.IDTIEM In ( 
         SELECT Imp0604.IDTIEM
         FROM Imp0604
         GROUP BY Imp0604.IDTIEM
         HAVING (((Sum(Imp0604.MTIMP))>1000)) 
    );
    Mais il ne marche pas j'ai le mesage d'erreur suivant :
    Vous avez essayé d'executer une requete ne comprenant pas l'expression spécifié IDTIEM comme une partie de la fontion agregat.

    Savez-vous d'ou viens l'erreur ?
    Merci a vous d'avance !

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 419
    Par défaut
    Salut

    plutot qu'une sous requete vaut peut etre mieux utiliser la fonction DSum dans la clause WHERE.
    Au passage tu peux un peu simplifier la requete en virant tout les "Imp0604." devant chaque champs.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 177
    Par défaut
    Citation Envoyé par boubignole
    Salut

    plutot qu'une sous requete vaut peut etre mieux utiliser la fonction DSum dans la clause WHERE.
    Au passage tu peux un peu simplifier la requete en virant tout les "Imp0604." devant chaque champs.
    ok, desolé mais je ne connait pas du tout la fonction DSum comment la mettre en oeuvre ?

  4. #4
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 186
    Par défaut
    ben, tu as essayé d'exécuter une requète ne comprenant pas l'expression spécifié IDTIEM comme une partie de la fonction de regroupement.
    Bref :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     SELECT IDTIEM, IDCT, NOIMP, CTEHPR, DTEHPR, DTEHEX, DTCRIM,
    DTEHLT, MTIMP, MAEHPR, MTINEH, MTPERE, MTEHDM, MTRESI, CDQL01, 
    NUECEL, CTIMPA, CDSDIM, CDSTIM, CDRMIM, DTREMI, MTREMI, MTREMP, 
    DTCORE, Sum(MTIMP) AS SommeDeMTIMP
    FROM Imp0604
    WHERE DTEHEX <#3/13/2006#  
    AND DTEHLT Is Null 
    AND CDSTIM<>9
    GROUP BY IDTIEM, IDCT, NOIMP, CTEHPR, DTEHPR, DTEHEX, DTCRIM,
    DTEHLT, MTIMP, MAEHPR, MTINEH, MTPERE, MTEHDM, MTRESI, CDQL01, 
    NUECEL, CTIMPA, CDSDIM, CDSTIM, CDRMIM, DTREMI, MTREMI, MTREMP, 
    DTCORE
    HAVING Sum(MTIMP)>1000 ;
    [Access] Les bases du débogage => ici

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 177
    Par défaut
    Merci beaucoup kloun ! Ca marche, vraiment experimenté ! rapide, efficace et clair ! la classe quoi !
    Encore merci !

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 177
    Par défaut
    En faite j'ai un probleme avec cette requete, aprés verification, je constate que de la somme MTIMP pour un IDTIEM est parfois inférieur à 1000... d'ou viens le probleme ?
    Voici la forme actuelle de ma requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    SELECT Imp0604.IDTIEM, Emprunteur.[Lib de l'emprunteur], Imp0604.IDCT, 
    Imp0604.NOIMP, Imp0604.CTEHPR, Imp0604.DTEHPR, Imp0604.DTEHEX, 
    Imp0604.DTCRIM, Imp0604.DTEHLT, Imp0604.MTIMP, Imp0604.MAEHPR, 
    Imp0604.MTINEH, Imp0604.MTPERE, Imp0604.MTEHDM, Imp0604.MTRESI, 
    Imp0604.CDQL01, Imp0604.NUECEL, Imp0604.CTIMPA, Imp0604.CDSDIM, 
    Imp0604.CDSTIM, Imp0604.CDRMIM, Imp0604.DTREMI, Imp0604.MTREMI, 
    Imp0604.MTREMP, Imp0604.DTCORE, Sum(Imp0604.MTIMP) AS 
    SommeDeMTIMP
    FROM Emprunteur INNER JOIN Imp0604 ON Emprunteur.[Id emprunteur] = 
    Imp0604.IDTIEM
    WHERE (((Imp0604.DTEHEX)<#3/13/2006#) AND ((Imp0604.DTEHLT) Is 
    Null) AND ((Imp0604.CDSTIM)<>9) AND ((Imp0604.IDTIEM) In (SELECT 
    Imp0604.IDTIEM
         FROM Imp0604
         GROUP BY Imp0604.IDTIEM
         HAVING (((Sum(Imp0604.MTIMP))>1000)) 
    )))
    GROUP BY Imp0604.IDTIEM, Emprunteur.[Lib de l'emprunteur], 
    Imp0604.IDCT, Imp0604.NOIMP, Imp0604.CTEHPR, Imp0604.DTEHPR, 
    Imp0604.DTEHEX, Imp0604.DTCRIM, Imp0604.DTEHLT, Imp0604.MTIMP, 
    Imp0604.MAEHPR, Imp0604.MTINEH, Imp0604.MTPERE, Imp0604.MTEHDM, 
    Imp0604.MTRESI, Imp0604.CDQL01, Imp0604.NUECEL, Imp0604.CTIMPA, 
    Imp0604.CDSDIM, Imp0604.CDSTIM, Imp0604.CDRMIM, Imp0604.DTREMI, 
    Imp0604.MTREMI, Imp0604.MTREMP, Imp0604.DTCORE;
    Merci d'avance !

  7. #7
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 186
    Par défaut
    Et avec la requète que je t'ai donné, tu as le même problème ?
    [Access] Les bases du débogage => ici

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 177
    Par défaut
    C'est la meme requete que la tienne, j'ai juste ajouté le champ libéllé, avec le requeteur access.

    En faite je pense que le probleme viens du fait que ca prend en compte dans le calcul de la somme de MTIMP les IDTIEM Dont DTEHEX >13/03/2006 et DTEHLT Est pas Null, et CDSTIM = 9. Il faut je pense donc descendre ces conditions dans le in select. Mais j'y connais rien en synthaxe sql. Merci a toi !

Discussions similaires

  1. requete SQL avec sous requete qui ne fonctionne pas
    Par skyarnangel dans le forum Langage SQL
    Réponses: 8
    Dernier message: 06/02/2009, 14h47
  2. [Requete] probleme de synthaxe sous SQL SERVER 2005
    Par sanosuke dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/05/2007, 11h24
  3. [sql 3] Sous-requetes
    Par yaroz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/03/2007, 18h29
  4. [SQL Server] Sous Requete dans le select
    Par Le Singe dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/11/2006, 09h11
  5. [SQL-Server] Sous requete dans une procédure stockée
    Par Worldofdada dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 09/02/2006, 11h18

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