ACC: How to Spitzenwerte N pro Gruppe Abfrage erstellen

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
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Moderat: Erfordert grundlegende Kenntnisse in den Bereichen Makros, Programmierung und Interoperabilität.
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.

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 153747 – Letzte Überarbeitung: 12/04/2015 15:04:19 – Revision: 3.3

Microsoft Access 95 Standard Edition, Microsoft Access 97 Standard Edition

  • kbnosurvey kbarchive kbmt kbhowto kbprogramming KB153747 KbMtde
Feedback