ACC: Come creare un primi N valori per le query di gruppo

Traduzione articoli Traduzione articoli
Identificativo articolo: 153747 - Visualizza i prodotti a cui si riferisce l?articolo.
Moderato: Impone la macro di base, codifica e le competenze di interoperabilitÓ.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

In questo articolo vengono illustrati due metodi che Ŕ possibile utilizzare per creare query che voci di elenco solo il primo N per ogni gruppo. Con uno di questi metodi, Ŕ possibile creare una query, ad esempio, che visualizza solo i primi cinque venditori per ogni area.

Il secondo metodo descritto in questo articolo si presuppone che l'utente conosca con Visual Basic, Applications Edition e con la creazione di applicazioni di Microsoft Access utilizzando gli strumenti di programmazione forniti con Microsoft Access. Per ulteriori informazioni su Visual Basic, Applications Edition, fare riferimento alla versione del manuale "Building Applications con Microsoft Access".

Informazioni

Per elencare solo i primi N elementi all'interno di un gruppo in una query, Ŕ necessario specificare un criterio che legge la colonna di raggruppamento nella query e limita la colonna di articolo per i primi N valori all'interno di ogni gruppo in modo dinamico. Metodo 1 utilizza una sottoquery SQL per generare dinamicamente un elenco degli elementi superiore N per ciascun gruppo e quindi utilizza tale elenco come criterio per la colonna di elemento utilizzando l'operatore IN. Metodo 2 utilizza una funzione definita dall'utente per restituire la voce n all'interno di un gruppo specifico, che viene quindi utilizzato con il > = (operatore) per restituire l'ennesimo e gli elementi di maggiori.

Metodo 1

Nell'esempio riportato di seguito viene illustrato come creare una query in database di esempio Northwind che visualizza il valore superiore di tre scorte per IDCategoria. La query utilizza una sottoquery SQL, che restituisce il superiore scorte tre assegnato un IDCategoria specifico, e quindi utilizza l'operatore IN per limitare i record nella query principale.

Nota: Nell'esempio di criteri nel passaggio 5, un carattere di sottolineatura (_) alla fine di una riga viene utilizzato come un carattere di continuazione di riga. Consente di rimuovere il carattere di sottolineatura alla fine del campo quando si ricrea i criteri.

  1. Aprire il database di esempio Northwind.mdb.
  2. Fare clic sulla scheda query e quindi fare clic su nuovo.
  3. Fare clic su visualizzazione struttura e quindi fare clic su OK.
  4. Nella finestra di dialogo Mostra tabella, aggiungere le categorie e i prodotti tabelle e quindi fare clic su Chiudi.
  5. Aggiungere i seguenti campi alla griglia della query:
    Campo : NomeCategoria
    Ordinamento: crescente

    Campo: NomeProdotto

    Campo: scorte
    Ordinamento: decrescente
    Criterio: In (Seleziona primi 3 [Scorte] FROM Prodotti WHERE _
    [IDCategoria] = [Categorie]. [IDCategoria] ordine per [Scorte] DESC)
  6. Eseguire la query. Si noti che la query restituisce il valore superiore di tre scorte per ogni categoria.

Metodo 2

Nell'esempio seguito viene illustrato come creare una query in database di esempio Northwind che visualizza le ultime cinque ordini per cliente. La query utilizza una funzione di criteri denominata NthInGroup() che restituisce il quinto pi¨ recente DataOrdine assegnato un CustomerID specifico. Utilizzando il > = operatore con questa funzione restituisce tutti gli ordini che sono stati ordinati o dopo il quinto pi¨ recente OrderDate per ciascun cliente:

  1. Aprire il database di esempio Northwind.mdb.
  2. Creare un nuovo modulo e aggiungere la seguente riga di dichiarazioni sezione se non Ŕ giÓ presente:
    opzione Explicit
  3. Creare la seguente routine:
          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. Compilare il modulo, quindi chiudere e salvare il modulo come basTopN.
  5. Fare clic sulla scheda query e quindi fare clic su nuovo.
  6. Fare clic su visualizzazione struttura e quindi fare clic su OK.
  7. Nella finestra di dialogo Mostra tabella, Ŕ possibile aggiungere tabelle Ordini e i clienti. Fare clic su Chiudi.
  8. Aggiungere i seguenti campi alla griglia della query:
    Campo : CustomerID
    Ordinamento: crescente


    Campi: OrderID

    Campo: Data ordine
    Ordinamento: decrescente
    Criterio: > = NthInGroup([Customers].[CustomerID],5)
  9. Eseguire la query. Si noti che per tutti i clienti che hanno almeno cinque ordini, la query restituisce i cinque ordini pi¨ recenti. Per i clienti con meno di cinque ordini, la query restituisce tutti gli ordini.

Riferimenti

Per ulteriori informazioni sulle subquery, cercare subquery , quindi sottoquery SQL utilizzando l'indice della Guida di Microsoft Access 97.

ProprietÓ

Identificativo articolo: 153747 - Ultima modifica: venerdý 19 gennaio 2007 - Revisione: 3.3
Le informazioni in questo articolo si applicano a:
  • Microsoft Access 95 Standard Edition
  • Microsoft Access 97 Standard Edition
Chiavi:á
kbmt kbhowto kbprogramming KB153747 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 153747
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.
Dichiarazione di non responsabilitÓ per articoli della Microsoft Knowledge Base su prodotti non pi¨ supportati
Questo articolo Ŕ stato scritto sui prodotti per cui Microsoft non offre pi¨ supporto. L?articolo, quindi, viene offerto ?cosý come Ŕ? e non verrÓ pi¨ aggiornato.

Invia suggerimenti

 

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