ACC: Jak vytvořit nejvyšší N hodnoty za Query skupiny

Překlady článku Překlady článku
ID článku: 153747 - Produkty, které se vztahují k tomuto článku.
Střední: Vyžaduje základní dovednosti v oblasti maker, kódování a práce v různých prostředích.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Tento článek popisuje dvě metody, můžete vytvořit dotazy, že položky seznamu pouze horní N za skupinu. Pomocí jedné z těchto metod můžete vytvořit dotaz, například, které zobrazí pouze prvních pět prodejců pro každou oblast.

Druhé metody popsané v tomto článku se předpokládá, že jste obeznámeni s jazyka pro aplikace a vytváření aplikací bude pomocí programování nástroje dodávané s aplikací Microsoft Access. Další informace o jazyka pro aplikace najdete verzi ruční "Building Applications s bude".

Další informace

Chcete-li seznam pouze prvních N položek v rámci skupiny v dotazu, je nutné zadat kritéria, která dynamicky přečte seskupení sloupec v dotazu a omezuje sloupec položku na nejvyšší hodnoty N v rámci každé skupiny. Metoda 1 používá SQL poddotazu dynamicky generovat seznam nejlepších položek N pro každou skupinu a potom tento seznam používá jako kritérium pro sloupec položky pomocí operátor. Metoda 2 používá k vrácení N. položky v rámci konkrétní skupiny, pak používá s uživatelem definované funkce > = operátor vrátit N. a větší položky.

Metoda 1

Následující příklad ukazuje, jak vytvořit dotaz v ukázkové databázi Northwind zobrazuje tři horní JednotkyNaSkladě za CategoryID. Dotaz používá poddotaz SQL, vrátí nejvyšší tři JednotkyNaSkladě dané konkrétní ČísloKategorie a používá operátor omezit záznamy v hlavním dotazu.

Poznámka: V příkladu kritérií v kroku 5 podtržítka (_) na konci řádku se používá jako znak pro pokračování řádku. Odebrat podtržení z konec řádku při znovu vytvářet kritéria.

  1. Otevřete ukázkovou databázi Northwind.mdb.
  2. Klepněte na kartu dotazy a poté klepněte na tlačítko Nový.
  3. Klepněte na příkaz Návrhové zobrazení a klepněte na tlačítko OK.
  4. Dialogové okno zobrazit tabulku přidat kategorie a Výrobky tabulky a klepněte na tlačítko Zavřít.
  5. Do mřížky dotazu přidejte následující pole:
    Pole : NázevKategorie
    Řazení: vzestupně

    Pole: ProductName

    Pole: JednotkyNaSkladě
    Řazení: sestupně
    Kritéria: In (Vybrat od produktů prvních 3 [JednotkyNaSkladě] kde _
    [ČísloKategorie] = [Kategorie]. [ČísloKategorie] pořadí podle DESC [JednotkyNaSkladě])
  6. Spusťte dotaz. Všimněte si, že dotaz vrátí nejvyšší tři JednotkyNaSkladě pro každou kategorii.

Metoda 2

Následující příklad ukazuje, jak vytvořit dotaz v ukázkové databázi Northwind zobrazuje posledních pět objednávek zadaných za zákazníka. Kritéria funkce nazývá NthInGroup() vrátí fifth nejnovější DatumObjednávky dané konkrétní KódZákazníka používá dotaz. Pomocí > = operátor spolu s Tato funkce vrací všechny objednávky, které byly objednány nebo po fifth nejnovější DatumObjednávky pro každého zákazníka:

  1. Otevřete ukázkovou databázi Northwind.mdb.
  2. Vytvořte nový modul a přidejte následující řádek deklarační sekce Pokud tam již není:
    Možnost Explicit
  3. Vytvořte následující proceduru:
          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. Kompilovat modul a potom zavřete a uložte modul jako basTopN.
  5. Klepněte na kartu dotazy a poté klepněte na tlačítko Nový.
  6. Klepněte na příkaz Návrhové zobrazení a klepněte na tlačítko OK.
  7. V dialogovém okně zobrazit tabulku přidat Zákazníci a objednávky tabulek. Klepněte na tlačítko Zavřít.
  8. Do mřížky dotazu přidejte následující pole:
    Pole : KódZákazníka
    Řazení: vzestupně


    Pole: KódObjednávky

    Pole: Datum objednávky
    Řazení: sestupně
    Kritéria: > = NthInGroup([Customers].[CustomerID],5)
  9. Spusťte dotaz. Všimněte si, že pro všechny zákazníky, kteří mají alespoň pět objednávek, dotaz vrátí pět nejnovějších objednávek. Pro zákazníky s méně než pět objednávek dotaz vrátí všechny objednávky.

Odkazy

Další informace o poddotazy vyhledávat poddotazů a poddotazů SQL pomocí rejstříku nápovědy Microsoft Access 97.

Vlastnosti

ID článku: 153747 - Poslední aktualizace: 19. ledna 2007 - Revize: 3.3
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Access 95 Standard Edition
  • Microsoft Access 97 Standard Edition
Klíčová slova: 
kbmt kbhowto kbprogramming KB153747 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:153747
Právní omezení pro obsah znalostní báze týkající se produktů, jejichž podpora byla ukončena
Tento článek byl napsán o produktech, pro které společnost Microsoft již neposkytuje nadále podporu. Článek je tedy nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.

Dejte nám zpětnou vazbu

 

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