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 :

Afficher n plus petites valeurs


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 232
    Points : 90
    Points
    90
    Par défaut Afficher n plus petites valeurs
    Bonjour,
    Je voudrais utiliser le code sql ci-dessous pour afficher les 3 plus petites valeurs d'un champs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TOP 3 Table1.valeur FROM Table1;ORDER BY
    Mon problème est que ma table comprends un champs "moteur" sur lequel je fais un regroupement (car le moteur peux être nommé plusieurs fois), et c'est sur chaque moteurs que je voudrais afficher les 3 plus petites valeurs.
    Quelqu'un pourrait il me dire que puis je rajouter à ma requête?
    Merci par avance

  2. #2
    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,

    Essaies qq chose du genre (non testé)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT T1.moteur,qTOP.valeur 
    FROM Table1 as T1 ,
      (SELECT TOP 3 T2.valeur 
        FROM Table1 T2 
        WHERE  T1.Moteur = T2.Moteur ORDER BY T2.valeur
       ) as qTOP 
    GROUP BY moteur
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 232
    Points : 90
    Points
    90
    Par défaut
    Bonjour et merci
    Cela ne marche pas.
    Lorsque j'exécute ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT T1.moteur, qTOP.valeur
    FROM Potentiel AS T1, [SELECT TOP 3 T2.valeur 
        FROM Potentiel T2 
        WHERE  T1.Moteur = T2.Moteur ORDER BY T2.valeur
       ]. AS qTOP
    GROUP BY moteur;
    L'application me renvoie le message suivant:
    "Vous avez essayé d'exécuter une requête ne comprenant pas l'expression spécifié 'Valeur' comme une partie de la fonction d'agrégat"
    Merci

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonsoir,
    il manque qTOP.Valeur dans le group by
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    GROUP BY moteur, qTOP.Valeur;

    Pour lister une ligne par moteur
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    TRANSFORM Min(A.Valeur)
    SELECT A.Moteur
    FROM 
    (SELECT 1+Count(b.moteur) As Indice, A.moteur,A.Valeur 
     FROM Potentiel As A LEFT JOIN Potentiel As B ON B.moteur=A.moteur AND
      B.Valeur<A.Valeur
      GROUP BY A.moteur, A.Valeur)       
    WHERE Indice<=3
    GROUP BY a.moteur
    PIVOT "Valeur " & Indice;

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 232
    Points : 90
    Points
    90
    Par défaut
    Bonsoir et merci,
    Le listage par ligne c'est le top.
    Merci encore pour ton aide.
    A+

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 232
    Points : 90
    Points
    90
    Par défaut
    Bonjour,
    Je voudrais revenir sur la première solution, code ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT T1.moteur, qTOP.valeur
    FROM Potentiel AS T1, [SELECT TOP 3 T2.valeur 
        FROM Potentiel T2 
        WHERE  T1.Moteur = T2.Moteur ORDER BY T2.valeur
       ]. AS qTOP
    GROUP BY moteur,qTOP.Valeur;
    Lorsque je lance la requête, une boite de message apparait.
    "Veuillez entrée la valeur du paramètre T1.Moteur ?"
    Pourquoi ce méssage?

    Si je tape un moteur, la requête s'exécute, affiche les trois plus petites valeur, mais uniquement pour ce moteur, et non pour tous les autres.
    Merci par avance

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour à tous,
    nomade333 essai la requête suivante
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT Potentiel.moteur, Potentiel.Valeur
    FROM Potentiel LEFT JOIN Potentiel As B
    ON B.moteur=Potentiel.moteur AND B.Valeur<Potentiel.valeur
    GROUP BY Potentiel.moteur,Potentiel.valeur
    HAVING Count(B.moteur)<3;

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 232
    Points : 90
    Points
    90
    Par défaut
    Merci Ilank,
    C'est le must.
    Merci encore

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/11/2013, 16h54
  2. Afficher le plus petit de 10 nombres
    Par crazyvirus dans le forum Débuter
    Réponses: 2
    Dernier message: 19/02/2008, 08h25
  3. [SQL] Sélectionner la plus petite valeur
    Par Gabout dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 30/04/2007, 10h36
  4. Afficher le plus petit des nombres
    Par wkm1807 dans le forum Access
    Réponses: 1
    Dernier message: 05/10/2005, 23h46
  5. [TP] Tirer 10 dates et afficher la plus petite
    Par moustaphes dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 16/08/2005, 09h54

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