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 :

Débutant Requête pour récupéré plusieurs Max


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Août 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2008
    Messages : 9
    Points : 10
    Points
    10
    Par défaut Débutant Requête pour récupéré plusieurs Max
    Bonjour,

    j'essais de faire tourné une requête permettant sur plusieurs catégorie(contenant chacunes plusieurs produits) de récupérer les 3 ou 4 montant les plus élévés par catégorie.

    Par exemple si je voulais les 2 montants max ma requête devrait me retourner ces valeurs en gras:
    Catégorie Produit Montant
    Cat 1 Prod1 12
    Cat 1 Prod2 25
    Cat 1 Prod3 36
    Cat 1 Prod4 42

    Cat 2 Prod5 46
    Cat 2 Prod6 52
    Cat 2 Prod7 89

    Cat 3 Prod8 56
    Cat 3 Prod9 84
    Cat 3 Prod10 90
    Cat 3 Prod11 112
    Cat 3 Prod12 2000


    j'ai une table contenant toutes les catégories, les produits et les montants(donc autant de lignes que de produits avec les montants associés)
    je voudrais récupérer les 3 montants les plus élevés, les regroupés pour analyse.

    Voilà, j'ai essayé de trouver des requêtes similaires sans résultat.
    Merci de vos retour

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 130
    Points : 70
    Points
    70
    Par défaut
    Juste une idée comme ça, tu veux pas récupérer chaque montant dans 2 variables?
    Je m'explique:
    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
     
    Dim req As String
    Dim rst As DAO.Recordset
    dim i, nbr, var1, var2, var3, var4 as integer
     
    req = Select * from tatable WHERE tacat = "catN";
    rst = CurrentDB.recordset(req)
    rst.MoveFirst
    nbr = rst.recordcount
    For i = 1 To nbr
    if rst.fields(tonprix) > var1
          var3 = var1
          var4 = var2
          var1 = rst.fields(tonprix)
          var2 = rst.fields(IDproduit)
    elseif rst.fields(tonprix) > var3
          var3 = rst.fields(tonprix)
          var4 = rst.fields(IDproduit)
    endif
    next
    rst.close
    Et tu as dans var2 et var4 les identifiants à récupérer :
    Pour la catégorie N tu affiche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    req = select * from tatable where ID = var2
    'affichage
    req = ... ID = var4
    C'est un peu long mais ça fait ce que tu veux.
    Si quelqu'un a mieux...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 130
    Points : 70
    Points
    70
    Par défaut
    Au pire en fonction de ce que tu veux dans ta boucle tu supprime le test sur la catégorie et tu ajoute un test IF pour chaque catégorie, tu augmente d'autant ton nombre de variables et tu fais tout afficher après...

  4. #4
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    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
     SELECT TOP 5
             TaTable.Catégorie
           , TaTable.Produit
    /* Tes montants sont ils déjà calculé ? */
           , TaTable.Montant
    FROM
    /* A compléter avec les jointures ! */
           TaTable
    /* Si des conditions sont requises ? */
    GROUP BY
             TaTable.Catégorie
           , TaTable.Produit
    /* Seulement si tes montant sont déjà calculés */
           , TaTable.Montant
    ORDER BY
              TaTable.Montant DESC ;
    J'ai peut-être omis quelque chose !
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



Discussions similaires

  1. Requête pour modifier plusieurs lignes d'une colonne
    Par nvit24 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/08/2011, 01h42
  2. Réponses: 2
    Dernier message: 07/02/2011, 18h34
  3. requête pour avoir min/max par intervales
    Par MASSAKA dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/06/2010, 19h41
  4. [XSLT] requête pour recuperer un max
    Par cheggour2004 dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 03/01/2008, 09h28
  5. Une requête pour éditer plusieurs lignes.
    Par Anduriel dans le forum Requêtes
    Réponses: 3
    Dernier message: 02/05/2006, 21h24

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