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

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
Tento článek byl archivován. Je nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.
Střední: Vyžaduje základní dovednosti v oblasti maker, kódování a práce v různých prostředích.
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.

Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 153747 - Poslední kontrola: 12/04/2015 15:04:19 - Revize: 3.3

Microsoft Access 95 Standard Edition, Microsoft Access 97 Standard Edition

  • kbnosurvey kbarchive kbmt kbhowto kbprogramming KB153747 KbMtcs
Váš názor