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 :

inclure une sous requête dans une requête


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Points : 58
    Points
    58
    Par défaut inclure une sous requête dans une requête
    Bonjour à tous, Voilà le problème...par tous les moyens j'essaie (pour la 1er fois!!) d'inclure une sous requête à ma requête initiale afin de voir afficher les enregistrements pour une solution unique (champ Solution). J'ai donc isolé chaque solution d'où le code SQL de ma sous requête :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCT [MaTable].Solution
    FROM [MaTable]
    WHERE ((([MaTable].Solution)IsNotNull))

    A chaque nouvel enregistrement dans la table l'utilisateur doit choisir la solution concernée et entrer une date de péremption à chaque fois q'une solution est fabriquée. Mon but est de créer une requête qui affiche le dernier enregistrement pour chaque solution existante (et donc la dernière date de péremption de chaque solution). J'ai donc inclue ma reqête vu plus haut en tant que critère du champ Solution. ce qui donne :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT [Table].Solution, [Table].DatePéremption
    FROM [Table]
    WHERE((([Table].Solution) = (SELECT DISTINCT [Table].Solution
    FROM [Table]
    WHERE ((([TABLE].Solution)Is Not Null;)) AND (([Table].DatePéremption)Is Not Null))
    ORDER BY [Table].DatePéremption DESC;

    Voilà mais le problème c'est que ca marche pas, j'ai un message à l'exécution : "cette sous requête peut retourner au plus un enregistrement"
    J'ai également essayé la fonction UNIQUE peut être est ce une solution à développer? merci à tous pour votre aide

  2. #2
    Membre éclairé Avatar de ft035580
    Profil pro
    Inscrit en
    Août 2004
    Messages
    689
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 689
    Points : 812
    Points
    812
    Par défaut
    Salut,

    Citation Envoyé par garsflo
    Mon but est de créer une requête qui affiche le dernier enregistrement pour chaque solution existante (et donc la dernière date de péremption de chaque solution).
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T1.Solution, T1.DatePéremption
    FROM [Table] AS T1
    WHERE (((T1.DatePéremption)>=(select max(DatePéremption) from [table] where Solution=T1.Solution)));

  3. #3
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonjour,

    Le message que tu obtiens est dû au fait que ta sous requete peut potientiellement retourner plusieurs valeurs. Tu ne peux pas dans ce cas utiliser un =

    il faudrait dans ce cas mettre qq chose du genre
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE((([Table].Solution) IN (SELECT DISTINCT [Table].Solution...
    mais tu n'obtiendrais pas pour autant le résultat attendu.

    Si ta requête peut être en lecture seule, tu peux faire simplement un group by

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT TABLE.Solution, Max(TABLE.DatePéremption) as DatePéremption
    FROM TABLE
    GROUP BY TABLE.Solution

    EDIT:
    La requête proposée par ft035580 est un exemple de sous-requête avec lien entre la requête principale et la sous requête. Elle est sans doute moins rapide qu'un group by (quoique cela reste à vérifier...) mais présente l'avantage d'obtenir une requête qui n'est pas en lecture seule.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Points : 58
    Points
    58
    Par défaut
    alors la bravo (moi j'y suis depuis ce matin sur le problème...mais ces formateur!!)
    merci beaucoup à tous les deux voila une bonne épine enlevée du pied! ca marche impeccablement

  5. #5
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    merci beaucoup à tous les deux
    De rien.

    N'oublies pas de cliquer sur

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 27/04/2011, 16h59
  2. Réponses: 6
    Dernier message: 13/11/2009, 16h06
  3. Requête utilisant une formule stockée dans une table
    Par alexiisme dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 23/01/2008, 07h01
  4. [VB2002] Inclure des sous-repertoires dans une installation
    Par pape0 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 28/09/2007, 17h48
  5. Réponses: 3
    Dernier message: 20/02/2007, 15h29

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