ACC: Τρόπος δημιουργίας ενός Κορυφαίες Ν τιμές ανά ομάδα ερωτημάτων

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 153747 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Μέση: Απαιτεί βασικές μακροεντολών, κωδικοποίησης και διαλειτουργικότητας ικανότητες.
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Περίληψη

Αυτό το άρθρο περιγράφει δύο μεθόδους που μπορείτε να χρησιμοποιήσετε για να δημιουργήσετε ερωτήματα που στοιχεία λίστας μόνο το επάνω N ανά ομάδα. Χρησιμοποιώντας οποιοδήποτε από τα δύο από αυτές τις μεθόδους, μπορείτε να δημιουργήσετε ένα ερώτημα, για παράδειγμα, που εμφανίζει μόνο τα άνω πέντε πωλητές για κάθε περιοχή.

Η δεύτερη μέθοδος που περιγράφεται σε αυτό το άρθρο προϋποθέτει ότι είστε εξοικειωμένοι με τη Visual Basic for Applications και με τη δημιουργία εφαρμογών Microsoft Access χρησιμοποιώντας τα εργαλεία προγραμματισμού που παρέχεται με τη Microsoft Access. Για περισσότερες πληροφορίες σχετικά με τη Visual Basic for Applications, ανατρέξτε τη δική σας έκδοση του εγχειριδίου "Δόμηση εφαρμογών με Microsoft Access".

Περισσότερες πληροφορίες

Για να εμφανίσετε μόνο τα πρώτα N στοιχεία μιας ομάδας σε ένα ερώτημα, πρέπει να καθορίσετε ένα κριτήριο που διαβάζει την ομαδοποίηση στηλών στο ερώτημα δυναμικά και να περιορίζει τη στήλη στοιχείο με τις ανώτερες τιμές N μέσα σε κάθε ομάδα. Η μέθοδος 1 χρησιμοποιεί ένα δευτερεύον ερώτημα SQL για να δημιουργήσετε δυναμικά μια λίστα με τα πρώτα N στοιχεία για κάθε ομάδα και στη συνέχεια χρησιμοποιεί αυτήν τη λίστα με τα κριτήρια της στήλης του στοιχείου χρησιμοποιώντας τον τελεστή IN. Μέθοδος 2 χρησιμοποιεί μια συνάρτηση οριζόμενη από το χρήστη για να επιστρέψει τη νιοστή στοιχείο μέσα σε μια συγκεκριμένη ομάδα, η οποία χρησιμοποιείται με το > = τελεστή για να επιστρέψετε τη νιοστή και μεγαλύτερη στοιχεία.

Μέθοδος 1

Το παρακάτω παράδειγμα δείχνει πώς μπορείτε να δημιουργήσετε ένα ερώτημα με το δείγμα βάσης δεδομένων Northwind που εμφανίζει το επάνω τρεις Μονάδες_Σε_Απόθεμα ανά "ΚωδΚατηγορίας". Το ερώτημα χρησιμοποιεί ένα δευτερεύον ερώτημα SQL, η οποία επιστρέφει το επάνω τρεις Μονάδες_Σε_Απόθεμα δίνεται μια συγκεκριμένη "ΚωδΚατηγορίας", και στη συνέχεια, χρησιμοποιεί τον τελεστή IN για να περιορίσετε τις εγγραφές στο κύριο ερώτημα.

ΣΗΜΕΙΩΣΗ: Στο παράδειγμα κριτηρίων στο βήμα 5, ένα χαρακτήρα υπογράμμισης (_) στο τέλος μιας γραμμής χρησιμοποιείται ως χαρακτήρας συνέχισης γραμμής. Κατάργηση της υπογράμμισης από το τέλος της γραμμής όταν δημιουργήσετε εκ νέου τα κριτήρια.

  1. Ανοίξτε το δείγμα βάσης δεδομένων Northwind.mdb.
  2. Κάντε κλικ στην καρτέλα ερωτήματα και στη συνέχεια κάντε κλικ στο κουμπί Δημιουργία.
  3. Κάντε κλικ στην προβολή σχεδίασης και, στη συνέχεια, κάντε κλικ στο κουμπί OK.
  4. Στο παράθυρο διαλόγου Εμφάνιση πίνακα, προσθέστε τις κατηγορίες και προϊόντα της πίνακες και, στη συνέχεια, κάντε κλικ στο κουμπί Κλείσιμο.
  5. Προσθέστε τα παρακάτω πεδία στο πλέγμα ερωτήματος:
    Πεδίο: Όνομα_κατηγορίας
    Ταξινόμηση: αύξουσα

    Πεδίο: Όνομα_προϊόντος

    Πεδίο: Μονάδες_Σε_Απόθεμα
    Ταξινόμηση: φθίνουσα
    Κριτήρια: In (επιλογή 3 [Μονάδες_Σε_Απόθεμα] επάνω από προϊόντα όπου _
    [ΚωδΚατηγορίας] = [Κατηγορίες].[ΚωδΚατηγορίας] Σειρά από φθίνουσας [Μονάδες_Σε_Απόθεμα])
  6. Εκτελέστε το ερώτημα. Σημειώστε ότι το ερώτημα επιστρέφει στο επάνω στοιχείο Μονάδες_Σε_Απόθεμα τρεις για κάθε κατηγορία.

Μέθοδος 2

Το παρακάτω παράδειγμα δείχνει πώς μπορείτε να δημιουργήσετε ένα ερώτημα με το δείγμα βάσης δεδομένων Northwind που εμφανίζει τις πέντε τελευταίες παραγγελιών ανά πελάτη. Το ερώτημα χρησιμοποιεί μια συνάρτηση κριτήρια που ονομάζεται NthInGroup() που επιστρέφει το πέμπτο πιο πρόσφατη Ημ/νίαΠαραγγελίας δίνεται μια συγκεκριμένη "ΚωδΠελάτη". Χρήση του > = τελεστή μαζί με τη συνάρτηση αυτή επιστρέφει όλες τις παραγγελίες που παραγγέλθηκαν ή μεταγενέστερη της ημερομηνίας παραγγελίας πέμπτο πιο πρόσφατα για κάθε πελάτη:

  1. Ανοίξτε το δείγμα βάσης δεδομένων Northwind.mdb.
  2. Δημιουργήστε μια νέα λειτουργική μονάδα και να προσθέσετε την ακόλουθη γραμμή δηλώσεις την ενότητα, αν δεν υπάρχει ήδη εκεί:
    Option Explicit
  3. Δημιουργήστε την ακόλουθη διαδικασία:
          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. Η μεταγλώττιση της λειτουργικής μονάδας, και στη συνέχεια, κλείστε και αποθηκεύστε τη λειτουργική μονάδα ως basTopN.
  5. Κάντε κλικ στην καρτέλα ερωτήματα και στη συνέχεια κάντε κλικ στο κουμπί Δημιουργία.
  6. Κάντε κλικ στην προβολή σχεδίασης και, στη συνέχεια, κάντε κλικ στο κουμπί OK.
  7. Στο παράθυρο διαλόγου Εμφάνιση πίνακα, προσθέστε το πελάτες και τους πίνακες παραγγελιών. Κάντε κλικ στο κουμπί "Κλείσιμο" (Close).
  8. Προσθέστε τα παρακάτω πεδία στο πλέγμα ερωτήματος:
    Πεδίο: "ΚωδΠελάτη"
    Ταξινόμηση: αύξουσα


    Field: OrderID

    Field: Order Date
    Sort: Descending
    Criteria: >= NthInGroup([Customers].[CustomerID],5)
  9. Run the query. Note that for all customers who have at least five orders, the query returns the five most recent orders. For customers with fewer than five orders, the query returns all orders.

Αναφορές

For more information about subqueries, search forsubqueries, and thenSQL subqueriesusing the Microsoft Access 97 Help Index.

Ιδιότητες

Αναγν. άρθρου: 153747 - Τελευταία αναθεώρηση: Σάββατο, 18 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Access 97 Standard Edition
Λέξεις-κλειδιά: 
kbhowto kbprogramming kbmt KB153747 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:153747
Αποποίηση ευθυνών για περιεχόμενο της Γνωσιακής Βάσης (KB) που έχει αποσυρθεί
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.

Αποστολή σχολίων

 

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