ACC: Cómo crear un valor Top N por consulta de grupo

Seleccione idioma Seleccione idioma
Id. de artículo: 153747 - Ver los productos a los que se aplica este artículo
Moderado: Requiere conocimientos de interoperabilidad, codificación y básico de las macros.
Expandir todo | Contraer todo

En esta página

Resumen

Este artículo se demuestra que dos métodos que puede utilizar para crear las consultas que Mostrar sólo los elementos de N superiores por grupo. Mediante el uso de uno de estos métodos, puede crear una consulta, por ejemplo, muestra sólo los cinco mejores vendedores para cada región.

El segundo método que se describe en este artículo se supone que está familiarizado con Visual Basic para Aplicaciones y con la creación de Microsoft Access aplicaciones que utilizan las herramientas de programación suministradas con Microsoft Access. Para obtener más información acerca de Visual Basic para Aplicaciones, consulte la versión del manual "Creación las aplicaciones con Microsoft Access".

Más información

Con el fin de mostrar sólo los elementos N superiores dentro de un grupo en una consulta, primero debe utilizar un criterio que lee dinámicamente la columna de agrupamiento en la consulta y los límites de la columna de artículos para las primeras N valores dentro de cada grupo. Método 1 utiliza una subconsulta SQL para generar dinámicamente una lista de los elementos N superiores para cada grupo y, a continuación, se usa esta lista como criterio para la columna de artículos mediante el operador IN. El método 2 utiliza una función definida por el usuario para devolver el enésimo elemento dentro de un grupo específico, que, a continuación, se utiliza con la > = (operador) para devolver el enésimo y elementos de mayores.

Método 1

En el ejemplo siguiente se muestra cómo se crea una consulta en la Northwind base de datos de ejemplo que muestra las unidades en existencia tres superior por Id. de categoría. La consulta usa una subconsulta SQL, que devuelve las unidades en existencia tres superior Dado un Id. de categoría específica y, a continuación, utiliza el operador para limitar la registros de la consulta principal.

Nota: en el ejemplo de criterios en el paso 5, un carácter de subrayado (_) al final de un línea se utiliza como un carácter de continuación de línea. Quite el carácter de subrayado desde el final de la línea, al volver a crear los criterios.

  1. Abra la base de datos de ejemplo Neptuno.mdb.
  2. Haga clic en la ficha consultas y, a continuación, haga clic en nuevo.
  3. Haga clic en la vista Diseño y, a continuación, haga clic en Aceptar.
  4. En el cuadro de diálogo Mostrar tabla, agregue las categorías y los productos las tablas y, a continuación, haga clic en Cerrar.
  5. Agregue los siguientes campos a la cuadrícula de consulta:
    Campo: NombreCategoría
    Ordenación: ascendente

    Campo: ProductName

    Campo: unidades en existencia
    Ordenación: descendente
    Criterios: En (seleccione tres [UnidadesEnExistencia] de productos donde _
    [IdCategoría] = [categorías].[IdCategoría] Order By [UnidadesEnExistencia] Desc)
  6. Ejecutar la consulta. Tenga en cuenta que la consulta devuelve las unidades en existencia tres superior para cada categoría.

Método 2

En el ejemplo siguiente se muestra cómo se crea una consulta en la Northwind base de datos de ejemplo que muestra los cinco últimos pedidos realizados por cliente. La consulta usa una función de criterios denominada NthInGroup() que devuelve la quinto más reciente FechaPedido dado un CustomerID específico. Mediante la > = operador junto con esta función devuelve todos los pedidos que se han pedido igual o posterior a la FechaPedido quinto más reciente para cada cliente:

  1. Abra la base de datos de ejemplo Neptuno.mdb.
  2. Cree un nuevo módulo y agregue la siguiente línea a las declaraciones sección si no aparece ya allí:
    Option Explicit
  3. Cree el procedimiento siguiente:
          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. Compile el módulo y, a continuación, cierre y guarde el módulo como basTopN.
  5. Haga clic en la ficha consultas y, a continuación, haga clic en nuevo.
  6. Haga clic en la vista Diseño y, a continuación, haga clic en Aceptar.
  7. En el cuadro de diálogo Mostrar tabla, agregue las tablas Customers y las pedidos. Haga clic en Cerrar.
  8. Agregue los siguientes campos a la cuadrícula de consulta:
    Campo: CustomerID
    Ordenación: ascendente


    Campos: OrderID

    Campo: Fecha de orden
    Ordenación: descendente
    Criterios: > = NthInGroup ([Compradores]. [[]IdCliente], 5)
  9. Ejecutar la consulta. Tenga en cuenta que para todos los clientes que tiene al menos cinco pedidos, la consulta devuelve los cinco pedidos más recientes. Para los clientes con menos de cinco pedidos, la consulta devuelve todos los pedidos.

Referencias

Para obtener más información acerca de las subconsultas, buscar subconsultasy, a continuación,Subconsultas SQL en el índice de Ayuda de Microsoft Access 97.

Propiedades

Id. de artículo: 153747 - Última revisión: domingo, 16 de diciembre de 2012 - Versión: 5.0
La información de este artículo se refiere a:
  • Microsoft Access 97 Standard Edition
Palabras clave: 
kbhowto kbprogramming kbmt KB153747 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 153747
Renuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Enviar comentarios

 

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