ACC: Como criar um primeiros N valores por consulta de grupo

Traduções de Artigos Traduções de Artigos
Artigo: 153747 - Ver produtos para os quais este artigo se aplica.
Moderado: Requer básica macros, codificação e interoperabilidade competências.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo mostra dois métodos que pode utilizar para criar consultas que itens de lista apenas a N superior por grupo. Utilizando qualquer um destes métodos, pode criar uma consulta, por exemplo, que apresenta apenas os melhores cinco vendedores para cada região.

O segundo método descrito neste artigo pressupõe que está familiarizado com o Visual Basic for Applications e criação de aplicações do Microsoft Access utilizando as ferramentas de programação fornecidas com o Microsoft Access. Para mais informações sobre o Visual Basic for Applications, consulte a versão do manual "Criar aplicações com o Microsoft Access".

Mais Informação

Para listar apenas os primeiros N itens dentro de um grupo numa consulta, tem de especificar um critério que lê a coluna de agrupamento na consulta dinamicamente e limita a coluna produto para os valores N superiores dentro de cada grupo. Método 1 utiliza uma subconsulta SQL para gerar dinamicamente uma lista dos itens principais N para cada grupo e, em seguida, utiliza esta lista como o critério para a coluna do item utilizando o operador IN. Método 2 utiliza uma função definida pelo utilizador para devolver o enésimo item num grupo específico, que, em seguida, é utilizado com a > = operador para devolver nth os itens superior.

Método 1

O exemplo seguinte mostra como criar uma consulta a base de dados de exemplo apresenta o existências três superior por CódigoDaCategoria. A consulta utiliza uma subconsulta SQL, que devolve o superior existências três dado CódigoDaCategoria específica, e, em seguida, utiliza o operador IN para limitar os registos na consulta principal.

NOTA: O exemplo de critérios no passo 5, um sublinhado (_) no final de uma linha é utilizado como um carácter de continuação de linha. Remova o sublinhado do final da linha quando recriar os critérios.

  1. Abra a base de dados exemplo Adamastor.mdb.
  2. Clique no separador consultas e, em seguida, clique em novo.
  3. Clique em vista de estrutura e, em seguida, clique em OK.
  4. Na caixa de diálogo Mostrar tabela, adicione as categorias e produtos tabelas e, em seguida, clique em Fechar.
  5. Adicione os seguintes campos à grelha da consulta:
    Campo : NomeDaCategoria
    Sort: ascendente

    Campo: ProductName

    Campo: existências
    Sort: descendente
    Critérios: Em (seleccionar superior 3 [Existências] de produtos onde _
    [CódigoDaCategoria] = [Categorias]. [CódigoDaCategoria] ordem por [Existências] DESC)
  6. Execute a consulta. Note que a consulta devolve o superior existências três para cada categoria.

Método 2

O exemplo seguinte demonstra como criar uma consulta a base de dados de exemplo apresenta as últimos cinco encomendas por cliente. A consulta utiliza uma função de critérios chamada NthInGroup() devolve a quinto mais recente DataDaEncomenda fornecida um CódigoDoCliente específico. Utilizar a > = operador juntamente com esta função devolve todas as encomendas que foram encomendadas ou posterior DataDaEncomenda quinto mais recente para cada cliente:

  1. Abra a base de dados exemplo Adamastor.mdb.
  2. Crie um novo módulo e adicione a seguinte linha de declarações secção se não estiver já existir:
    opção explícita
  3. Crie o seguinte procedimento:
          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. Compilar o módulo e, em seguida, feche e guarde o módulo como basTopN.
  5. Clique no separador consultas e, em seguida, clique em novo.
  6. Clique em vista de estrutura e, em seguida, clique em OK.
  7. Na caixa de diálogo Mostrar tabela, adicione os clientes e as tabelas de encomendas. Clique em Fechar.
  8. Adicione os seguintes campos à grelha da consulta:
    Campo : CódigoDoCliente
    Sort: ascendente


    Campo: CódigoDaEncomenda

    Campo: Data da encomenda
    Sort: descendente
    Critérios: > = NthInGroup([Customers].[CustomerID],5)
  9. Execute a consulta. Note que todos os utilizadores que tenham pelo menos cinco encomendas, a consulta devolve as cinco encomendas mais recentes. Para clientes com menos de cinco encomendas, a consulta devolve todas as encomendas.

Referências

Para obter mais informações sobre subconsultas, procure As subconsultas e subconsultas SQL utilizando o índice remissivo ajuda do Microsoft Access 97.

Propriedades

Artigo: 153747 - Última revisão: 19 de janeiro de 2007 - Revisão: 3.3
A informação contida neste artigo aplica-se a:
  • Microsoft Access 95 Standard Edition
  • Microsoft Access 97 Standard Edition
Palavras-chave: 
kbmt kbhowto kbprogramming KB153747 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 153747
Exclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.

Submeter comentários

 

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