ACC : Comment créer un premières N valeurs par demande groupe

Traductions disponibles Traductions disponibles
Numéro d'article: 153747 - Voir les produits auxquels s'applique cet article
Modéré : Nécessite des compétences de l'interopérabilité, de codage et de macro de base.
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article illustre deux méthodes que vous pouvez utiliser pour créer des requêtes liste uniquement le N premier articles par groupe. À l'aide de l'une de ces méthodes, vous pouvez créer une requête, par exemple, qui affiche uniquement les cinq premiers vendeurs pour chaque région.

La deuxième méthode décrite dans cet article suppose que vous êtes familiarisé avec Visual Basic pour applications et la création d'applications de Microsoft Access à l'aide des outils de programmation fournis avec Microsoft Access. Pour plus d'informations sur Visual Basic pour applications, reportez-vous à votre version du manuel «Création d'applications avec Microsoft Access».

Plus d'informations

Pour répertorier uniquement les N premiers éléments au sein d'un groupe dans une requête, vous devez spécifier un critère qui lit la colonne de regroupement dans la requête et limite la colonne élément pour les N premières valeurs au sein de chaque groupe de façon dynamique. Méthode 1 utilise une sous-requête SQL pour générer dynamiquement une liste des N premiers éléments pour chaque groupe et utilise ensuite cette liste comme critère pour la colonne de l'élément à l'aide de l'opérateur IN. Méthode 2 utilise une fonction définie par l'utilisateur pour renvoyer la Nième élément au sein d'un groupe spécifique, qui est ensuite utilisé avec le > = (opérateur) pour renvoyer les éléments supérieurs et ne.

Méthode 1

L'exemple suivant montre comment créer une requête dans l'exemple de base de données Les Comptoirs affiche trois UnitsInStock supérieure par CategoryID. La requête utilise une sous-requête SQL qui retourne UnitsInStock trois supérieur donné un code de catégorie spécifique, puis utilise l'opérateur IN pour limiter le nombre d'enregistrements dans la requête principale.

Remarque : Dans l'exemple de critères à l'étape 5, un trait de soulignement (_) à la fin d'une ligne est utilisé comme un caractère de continuation de ligne. Supprimez le trait de soulignement de fin de la ligne lorsque vous recréez les critères.

  1. Ouvrez la base de données Comptoir.mdb.
  2. Cliquez sur l'onglet requêtes, puis cliquez sur Nouveau.
  3. Cliquez sur mode Création, puis cliquez sur OK.
  4. Dans la boîte de dialogue Afficher la table, ajoutez les catégories et les produits tables, puis cliquez sur Fermer.
  5. Ajoutez les champs suivants dans la grille de la requête :
    Champ : Nom de catégorie
    Tri : croissant

    Champ : ProductName

    Champ : champ UnitsInStock
    Tri : dans l'ordre décroissant
    Critères : In (SELECT TOP 3 [UnitésEnStock] FROM Produits WHERE _
    [RéfCatégorie] = [Catégories]. [RéfCatégorie] commande par [UnitésEnStock] DESC)
  6. Exécutez la requête. Notez que la requête retourne trois UnitsInStock supérieure pour chaque catégorie.

Méthode 2

L'exemple suivant montre comment créer une requête dans la base de données exemple Les Comptoirs qui affiche les cinq dernières commandes passées par client. La requête utilise une fonction de critères appelée NthInGroup() renvoie la cinquième plus récente date de commande donné un code de client spécifique. À l'aide de la > = opérateur avec cette fonction renvoie toutes les commandes qui ont été commandés sur ou après le cinquième dernière date de commande pour chaque client :

  1. Ouvrez la base de données Comptoir.mdb.
  2. Créer un nouveau module et ajoutez la ligne suivante pour les déclarations de section si elle n'est pas déjà :
    Option explicite
  3. Créez la procédure suivante :
          Function NthInGroup(GroupID, N)
          ' Returns the Nth Item in GroupID for use as a Top N per group
          ' query criteria.
          Static LastGroupId, LastNthInGroup
          Dim ItemName, GroupIDName, GDC, SearchTable
          Dim SQL As String, rs As Recordset, db As DATABASE
    
          If (LastGroupId = GroupID) Then
             ' Returned saved result if function is called with the
             ' same GroupID more than once in a row.
             NthInGroup = LastNthInGroup
          Else
             ' Set the SQL statement parameters. These are the only items
             ' that need to be customized in this function.
             ' Set to Item field name.
             ItemName = "OrderDate"
             ' Set to Group ID field name.
             GroupIDName = "CustomerID"
             ' GroupID Delimiter Character:
             ' For Text use "'" (Note that this is a quotation mark, a space,
             ' an apostrophe, a space, and then a quotation mark. The spaces
             ' are necessary for SQL statements), Date "#", Numeric ""
             GDC = "'"
             ' Set to search table.
             SearchTable = "Orders"
             ' Build a Top N SQL statement dynamically given N and
             ' GroupID as parameters. Note that the sort is by the
             ' item in descending order, in order to get the Top N
             ' largest items.
             SQL = "Select Top " & N & " [" & ItemName & "] "
             SQL = SQL & "From [" & SearchTable & "] "
             SQL = SQL & "Where [" & GroupIDName & "]=" & GDC & GroupID & GDC _
                & " "
             SQL = SQL & "Order By [" & ItemName & "] Desc"
             ' Open up recordset on Top N SQL statement and read the
             ' last record to get the smallest item in the Top N.
             Set db = CurrentDb()
             Set rs = db.OpenRecordset(SQL)
             If (rs.BOF And rs.EOF) Then
                ' No matches found, return a null.
                LastNthInGroup = Null
                LastGroupId = GroupID
                NthInGroup = LastNthInGroup
                Else
                   ' Return the smallest Top N item in the group.
                   rs.MoveLast
                   LastNthInGroup = rs(ItemName)
                   LastGroupId = GroupID
                   NthInGroup = LastNthInGroup
                 End If
              End If
    
           End Function
    						
  4. Compilez le module, puis fermez et enregistrez le module sous basTopN.
  5. Cliquez sur l'onglet requêtes, puis cliquez sur Nouveau.
  6. Cliquez sur mode Création, puis cliquez sur OK.
  7. Dans la boîte de dialogue Afficher la table, ajoutez les noms des clients et les tables de commandes. Cliquez sur Fermer.
  8. Ajoutez les champs suivants dans la grille de la requête :
    Champ : Code client
    Tri : croissant


    Champs : RéfCommande

    Champ : Date de commande
    Tri : dans l'ordre décroissant
    Critères: > = NthInGroup([Customers].[CustomerID],5)
  9. Exécutez la requête. Notez que pour tous les clients ayant au moins cinq commandes, la requête renvoie les cinq commandes plus récentes. Pour les clients possédant moins de cinq commandes, la requête renvoie toutes les commandes.

Références

Pour plus d'informations sur les sous-requêtes, effectuez une recherche sur les sous-requêtes et les sous-requêtes SQL à l'aide de l'index de l'aide de Microsoft Access 97.

Propriétés

Numéro d'article: 153747 - Dernière mise à jour: vendredi 19 janvier 2007 - Version: 3.3
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Access 95 Standard
  • Microsoft Access 97 Standard
Mots-clés : 
kbmt kbhowto kbprogramming KB153747 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 153747
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Exclusion de responsabilité concernant les contenus obsolètes dans la Base de connaissances
Cet article concerne des produits pour lesquels Microsoft n'offre plus de support. Il est par conséquent fourni « en l'état » et ne sera plus mis à jour.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com