ACC: Ako vytvoriť Top N hodnôt za skupinu dotaz

Preklady článku Preklady článku
ID článku: 153747 - Zobraziť produkty, ktorých sa tento článok týka.
Mierna: Vyžaduje základné makro, kódovanie a interoperabilitu zručností.
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

SUHRN

Tento článok ukazuje vám dva spôsoby, ktoré môžete použiť na vytvorenie dotazy, ktoré zoznam iba top n položky jednu skupinu. Pomocou jednej z týchto metód, môžete vytvoriť dotaz, napríklad, že zobrazí iba top päť predajcov pre každý región.

Druhá metóda opísaná v tomto článku sa predpokladá, že ovládate s programom Visual Basic pre aplikácie a s vytváraním programu Microsoft Access aplikácie, ktoré používajú v programovacích nástrojoch s Microsoft Access. Ďalšie informácie o jazyka Visual Basic for Applications nájdete vaša verzia príručky „budovanie aplikácií s Microsoft Access".

DALSIE INFORMACIE

Ak chcete zobraziť zoznam iba top n položiek v rámci skupiny v dotaze, musíte zadajte kritériá, ktoré dynamicky číta zoskupenia stĺpca v dotaze a limity položku stĺpec začiatok n hodnôt v rámci každej skupiny. Postup č. 1 používa SQL poddotaz dynamicky generovať zoznam top n položiek pre každú skupinu, a potom použije tento zoznam ako kritériá pre položku stĺpec používa operátor IN. Metóda 2 definované používateľom funkcia používa na vrátenie n-té položku v rámci špecifickú skupinu, ktorá sa potom používa s > operátor vrátiť Nth = a väčšiu položky.

Postup č. 1

Nasledujúci príklad ukazuje, ako vytvoriť dotaz v Northwind Ukážková databáza, ktorý zobrazuje hornej tri JednotkyNaSklade za IdentifikáciaKategórie. Dotaz využíva poddotaz SQL, ktorý vráti najvyššie tri JednotkyNaSklade za špecifické IdentifikáciaKategórie, a potom používa sa v prevádzkovateľa obmedziť záznamy v hlavných dotazu.

Poznámka: V príklade kritériá v kroku 5, podčiarkovník (_) na konci vedenie používa ako znak pokračovania riadku. Odstrániť znak podčiarknutia od konca riadku, keď vykonß kritériá.

  1. Otvorte ukážkovú databázu Northwind.mdb.
  2. Kliknite na kartu Dotazy a potom kliknite na položku Nový.
  3. Kliknite na položku Návrhové zobrazenie, a potom kliknite na tlačidlo OK.
  4. V dialógovom okne Zobrazenie tabuľky pridať kategórie a produkty tabuľky, a potom kliknite na tlačidlo Zavrieť.
  5. Pridať nasledovné polia do mriežky dotazu:
    Pole: NázovKategórie
    Zoradiť: vzostupne

    Pole: ProductName

    Pole: JednotkyNaSklade
    Zoradiť: zostupne
    Kritériá: V (vyberte Top 3 [JednotkyNaSklade] od výrobkov, kde _
    [IdentifikáciaKategórie] = [kategórie].[IdentifikáciaKategórie] Order By [JednotkyNaSklade] Desc)
  6. Spustite dotaz. Poznámka dotaz vracia hornej tri JednotkyNaSklade pre každú kategóriu.

Metóda 2

Následujúci príklad demonštruje ako vytvoriť dotaz v Northwind Ukážková databáza, ktorá zobrazuje posledných piatich objednávok umiestnené na zákazníka. Dotaz využíva kritériá funkciu nazýva NthInGroup(), ktorý vráti piate najnovších DátumObjednávky vzhľadom na špecifické KódZákazníka. Pomocou > = prevádzkovateľ spolu s táto funkcia vráti všetky objednávky, ktoré boli objednané alebo po piate najnovších DátumObjednávky pre každého zákazníka:

  1. Otvorte ukážkovú databázu Northwind.mdb.
  2. Vytvoriť nový modul a pridajte nasledujúci riadok na vyhlásenia sekcia Ak už nie je:
    Možnosť explicitné
  3. Vytvorte nasledovný postup:
          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. Zostaviť modulu, a potom zatvorte a uložiť modulu ako basTopN.
  5. Kliknite na kartu Dotazy a potom kliknite na položku Nový.
  6. Kliknite na položku Návrhové zobrazenie, a potom kliknite na tlačidlo OK.
  7. V dialógovom okne Zobrazenie tabuľky pridať zákazníkov a tabuľky objednávky. Kliknite na tlačidlo Zavrieť.
  8. Pridať nasledovné polia do mriežky dotazu:
    Pole: KódZákazníka
    Zoradiť: vzostupne


    Pole: Identifikácia objednávky

    Pole: Dátum objednávky
    Zoradiť: zostupne
    Kritériá: > = NthInGroup ([Zákazníci]. [KódZákazníka], 5)
  9. Spustite dotaz. Poznámka, že pre všetkých zákazníkov, ktorí majú aspoň päť objednávky, dotaz vráti päť rádov podľa najnovších. Pre zákazníkov s menej ako päť objednávok, dotaz vráti všetky objednávky.

ODKAZY

Ďalšie informácie o Poddotazy, vyhľadávanie Poddotazy, a potomPoddotazy SQL pomocou programu Microsoft Access 97 register Pomocníka.

Vlastnosti

ID článku: 153747 - Posledná kontrola: 17. októbra 2011 - Revízia: 2.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • Microsoft Access 97 Standard Edition
Kľúčové slová: 
kbhowto kbprogramming kbmt KB153747 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:153747
Upozornenie na neaktuálny obsah článku databázy KB
Tento článok obsahuje informácie o produktoch, pre ktoré spoločnosť Microsoft už neposkytuje technickú podporu. Z tohto dôvodu je tento článok publikovaný ako nezmenený a už nebude aktualizovaný.

Odošlite odozvu

 

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