ACC: How to Spitzenwerte N pro Gruppe Abfrage erstellen

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 153747 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Moderat: Erfordert grundlegende Kenntnisse in den Bereichen Makros, Programmierung und Interoperabilität.
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Dieser Artikel beschreibt zwei Methoden, die Sie verwenden können, um Abfragen zu, dass nur die oberen N Elemente pro Gruppe erstellen. Eine der folgenden Methoden verwenden, können Sie eine Abfrage erstellen, zeigt, z. B. nur die oberen fünf Verkaufsberater für jeden Bereich.

Die zweite Methode in diesem Artikel beschriebenen wird davon ausgegangen, dass Sie mit Visual Basic für Applikationen und mit dem Erstellen von Microsoft Access-Anwendungen mit der mit Microsoft Access enthaltenen Programmiertools vertraut sind. Weitere Informationen zu Visual Basic für Applikationen finden Sie in Ihrer Version des Handbuchs "Building Applications with Microsoft Access" (Erstellen von Anwendungen mit Microsoft Access).

Weitere Informationen

Um nur die oberen N Elemente innerhalb einer Gruppe in einer Abfrage auflisten, müssen Sie ein Kriterium, die dynamisch liest die Gruppierung-Spalte in der Abfrage und beschränkt die Spalte Element, um die oberen N Werte innerhalb jeder Gruppe angeben. Methode 1 eine SQL-Unterabfrage verwendet, um eine Liste der oberen N Elemente für jede Gruppe dynamisch zu generieren und verwendet dann diese Liste als Kriterium für die Verwendung des Operators IN Element-Spalte. Methode 2 wird eine benutzerdefinierte Funktion verwendet, um das n-te Element innerhalb einer bestimmten Gruppe zurückzugeben, die dann mit wird der > = Operator die n-te und größere Elemente zurückzugeben.

Methode 1

Das folgende Beispiel veranschaulicht die eine Abfrage in der Nordwind-Beispieldatenbank zu erstellen, die die obersten drei Lagerbestand pro CategoryID anzeigt. Die Abfrage verwendet, eine SQL-Unterabfrage die obersten drei Lagerbestand erhält eine bestimmte Kategorie-Nr gibt und anschließend den IN-Operator zum Einschränken der Datensätze in der Hauptabfrage.

Hinweis: Im Beispiel Kriterien in Schritt 5 ist ein Unterstrich (_) am Ende einer Zeile als ein Zeilenfortsetzungszeichen verwendet. Entfernen Sie beim Neuerstellen der Kriterien den Unterstrich vom Ende der Zeile.

  1. Öffnen Sie die Beispieldatenbank "Nordwind.mdb".
  2. Klicken Sie auf die Registerkarte Abfragen, und klicken Sie auf neu.
  3. Wählen Sie die Option Entwurfsansicht und anschließend auf OK.
  4. Klicken Sie im Dialogfeld Tabelle anzeigen hinzufügen, die Kategorien und die Artikel Tabellen und klicken Sie dann auf Schließen.
  5. Fügen Sie in den Abfragebereich die folgenden Felder:
    -Feld: Kategoriename
    Sortierung: Aufsteigend

    Feld: ProductName

    Feld: Lagerbestand
    Sortieren: absteigend
    Kriterien: In (SELECT Top 3 [Lagerbestand] von Produkten _
    [KategorieID] = [Kategorien]. [Kategorie-Nr] ORDER BY [Lagerbestand] Beschreibung)
  6. Führen Sie die Abfrage. Beachten Sie, dass die Abfrage die obersten drei Lagerbestand für jede Kategorie zurückgibt.

Methode 2

Das folgende Beispiel veranschaulicht eine Abfrage in der Nordwind-Beispieldatenbank zu erstellen, die die letzten fünf Bestellungen pro Kunde anzeigt. Die Abfrage verwendet eine Kriterium-Funktion aufgerufen, NthInGroup(), der die fünfte letzte Bestelldatum erhält eine bestimmte CustomerID zurückgibt. Mithilfe der > =-Operator zusammen mit dieser Funktion gibt alle Bestellungen, die am oder nach fünfte letzte Bestelldatum für jeden Debitor bestellt wurden zurück:

  1. Öffnen Sie die Beispieldatenbank "Nordwind.mdb".
  2. Erstellt ein neues Modul und die Deklarationen die folgende Zeile hinzugefügt Abschnitt, wenn es nicht bereits vorhanden ist:
    Option Explicit
  3. Erstellen Sie die folgende Prozedur:
          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. Kompilieren Sie das Modul und dann schließen Sie und speichern Sie das Modul als BasTopN.
  5. Klicken Sie auf die Registerkarte Abfragen, und klicken Sie auf neu.
  6. Wählen Sie die Option Entwurfsansicht und anschließend auf OK.
  7. Klicken Sie im Dialogfeld Tabelle anzeigen fügen Sie den Kunden Tabellen und Orders hinzu. Klicken Sie auf Schließen.
  8. Fügen Sie in den Abfragebereich die folgenden Felder:
    -Feld: Kunden-Nr
    Sortierung: Aufsteigend


    Feld: BestellNr

    Feld: Bestelldatum
    Sortieren: absteigend
    Kriterien: > = NthInGroup([Customers].[CustomerID],5)
  9. Führen Sie die Abfrage. Beachten Sie, dass für alle Kunden, die mindestens fünf Bestellungen, die Abfrage die fünf neuesten Bestellungen zurückgibt. Für Kunden mit weniger als fünf Bestellungen gibt die Abfrage alle Bestellungen zurück.

Informationsquellen

Weitere Informationen zu Unterabfragen nach Unterabfragen und SQL-Unterabfragen mit Microsoft Access 97-Hilfeindex suchen.

Eigenschaften

Artikel-ID: 153747 - Geändert am: Freitag, 19. Januar 2007 - Version: 3.3
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Access 95 Standard Edition
  • Microsoft Access 97 Standard Edition
Keywords: 
kbmt kbhowto kbprogramming KB153747 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 153747
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Disclaimer zu nicht mehr gepflegten KB-Inhalten
Dieser Artikel wurde für Produkte verfasst, für die Microsoft keinen Support mehr anbietet. Der Artikel wird deshalb in der vorliegenden Form bereitgestellt und nicht mehr weiter aktualisiert.

Ihr Feedback an uns

 

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