ACC: Het maken van een Top N waarden per groepsquery

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 153747 - Bekijk de producten waarop dit artikel van toepassing is.
Matig: Basic macro, codering en interoperabiliteit vaardigheden vereist.
Alles uitklappen | Alles samenvouwen

Op deze pagina

Samenvatting

In dit artikel ziet u twee methoden voor het maken van query's die alleen de top n items per groep weergeven. Met behulp van een van deze methoden u kunt een query maken, bijvoorbeeld dat alleen de vijf beste verkopers voor elke regio wordt weergegeven.

De tweede methode wordt beschreven in dit artikel wordt ervan uitgegaan dat u bekend bent met Visual Basic for Applications en Microsoft Access maken met de hulpprogramma's van Microsoft Access-toepassingen. Raadpleeg voor meer informatie over Visual Basic for Applications uw versie van het handboek 'Building Applications with Microsoft Access'.

Meer informatie

Om de lijst alleen de top n items binnen een groep in een query, moet u een criterium dat dynamisch leest de kolom groeperen in de query opgeven en beperkt de kolom item aan de top n waarden binnen elke groep. Methode 1 SQL-subquery gebruikt om een lijst van de top n items dynamisch genereren voor elke groep en maakt u deze lijst als criteria voor de kolom item Gebruik de operator IN. Methode 2 gebruikt een door de gebruiker gedefinieerde functie het zoveelste artikel binnen een specifieke groep wordt vervolgens gebruikt bij de > = operator om het Nth retourneren en items groter.

Methode 1

Het volgende voorbeeld ziet u hoe een query maken in de Noordenwind de voorbeelddatabase die de bovenste drie Voorradig per categorie-id wordt weergegeven. De query gebruikt een SQL-subquery die resulteert in de bovenste drie Voorradig gegeven een specifieke categorie-id en gebruikt de operator beperken de records in de hoofdquery.

Opmerking: In het voorbeeld in stap 5 een onderstrepingsteken (_) aan het einde van een regel wordt gebruikt als een regelvervolgteken. Verwijder het onderstrepingsteken vanaf het einde van de regel wanneer u de criteria opnieuw.

  1. Open de voorbeelddatabase Noordenwind.mdb.
  2. Klik op het tabblad query's en klik vervolgens op Nieuw.
  3. Klik op ontwerpweergave en klik vervolgens op OK.
  4. Klik in het dialoogvenster Tabel weergeven de categorieën en producten toevoegen tabellen en klik vervolgens op sluiten.
  5. De volgende velden aan het queryraster toevoegen:
    Veld: categorienaam
    Sorteren: oplopend

    Veld: Productnaam

    Veld: Voorradig
    Sorteren: aflopend
    Criteria: In (Selecteer Top 3 [Voorradig] in producten waar _
    [Categorienummer] = [Categorieën].[Categorienummer] Order By [Voorradig] Desc)
  6. De query uitvoeren. Opmerking de query geeft de bovenste drie Voorradig voor elke categorie.

Methode 2

In het volgende voorbeeld wordt gedemonstreerd hoe u een query maken in de Noordenwind voorbeelddatabase met de laatste vijf orders geplaatst per klant. Een criteria-functie genaamd NthInGroup() die wordt geretourneerd door de query worden gebruikt de vijfde meest recente Orderdatum gegeven een bepaald klantnummer. Met de > = operator met deze functie geeft als resultaat alle orders die zijn besteld op of na de vijfde meest recente orderdatum voor elke klant:

  1. Open de voorbeelddatabase Noordenwind.mdb.
  2. Maak een nieuwe module en de volgende regel toevoegen aan de aangiften sectie als deze nog niet is er:
    Optie Explicit
  3. Maak de volgende procedure:
          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. De module te compileren en sluiten en sla de module op als basTopN.
  5. Klik op het tabblad query's en klik vervolgens op Nieuw.
  6. Klik op ontwerpweergave en klik vervolgens op OK.
  7. Toevoegen in het dialoogvenster Tabel weergeven de tabellen Orders en klanten. Klik op sluiten.
  8. De volgende velden aan het queryraster toevoegen:
    Veld: klantnummer
    Sorteren: oplopend


    Veld: order-id

    Veld: Datum
    Sorteren: aflopend
    Criteria: > = NthInGroup ([Klanten]. [CustomerID] 5)
  9. De query uitvoeren. Opmerking voor alle klanten die dat ten minste vijf orders, retourneert de query de vijf meest recente orders. Voor klanten de query retourneert alle orders met minder dan vijf orders.

Referenties

Zoek voor meer informatie over de subquery 's subquery 's, enSQL-subquery 's Gebruik de Help-Index van Microsoft Access 97.

Eigenschappen

Artikel ID: 153747 - Laatste beoordeling: dinsdag 17 juli 2012 - Wijziging: 3.0
De informatie in dit artikel is van toepassing op:
  • Microsoft Access 97 Standard Edition
Trefwoorden: 
kbhowto kbprogramming kbmt KB153747 KbMtnl
Automatisch vertaald artikel
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende: 153747
Vrijwaring inhoud KB-artikelen over niet langer ondersteunde producten
Dit artikel heeft betrekking op producten waarvoor Microsoft geen ondersteuning meer biedt. Daarom wordt dit artikel alleen in de huidige vorm aangeboden en wordt het niet meer bijgewerkt.

Geef ons feedback

 

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