Extraer los Top-n registros de una tabla

Tengo una Tabla1 con dos campos: código y n_premios (que varía para cada código). En otra Tabla2, tengo código (coincidentes con el de la primera tabla), dni's y notas.

En la consulta que quiero realizar, necesito que access me extraiga los "Top-n" valores más altos ordenados por nota de cada código coincidente entre ambas tablas, pero no quiero que solo sea el "TOP 2", "TOP 3" sino que se seleccione el "TOP n" para cada código, según se indica en n_premios. El caso es que por cada código se entregan 1, 2 ó 3 premios (valor que se indica en "n").

Por ejemplo: En la Tabla 1, el código A tiene asignado 1 premio y el código B, 2 premios. En la Tabla 2, tenemos que A tiene 4 dni's (escogeríamos el que más nota tiene dado que solo se le asigna un premio) y B tiene 3 dni's (escogeríamos los dos que más nota tienen dado que a este código se le asignan dos premios). Y así sucesivamente.

1 respuesta

Respuesta
1

Con una consulta directa no puedes hacerlo, tendrás que recurrir a crear una tabla auxiliar y rellenarla por código, como en el ejemplo que te pasé de Neckkito.

La cosa iría así: necesitas una consulta como la Consulta1 de mi ejemplo anterior. Luego en vez de hacer la Consulta2, en un botón de un formulario creas un código que te recorra la Tabla1, cogiendo el código y el número de premios y vas creando SQLs para cada código con el TOP correspondiente, y pasando esos resultados a TAux.

Te adjunto de nuevo el archivo con el código que hace lo que buscas: http://www.filebig.net/files/zFDeHKtttf

Algo me falla... 

http://www.filebig.net/files/knUDZyszPS 

Y otra pregunta: ¿ por qué en la Tabla1 se decuelgan registros de cada registro ?

PD: he sustituido el nombre del campo "dni" por "nia" en la BD que te he enviado.

Gracias de nuevo

http://www.filebig.net/files/ZSrSaAr386  

No te funcionaba porque en tu caso, Codigo es texto y en el mío es número. Entonces en la variable miSQL, cuando filtras por ese valor, hay que escribirlo como texto (entre comillas simples)

Además, como veo que tienes registros con n_premios=0, y no puedes hacer un SELECT TOP 0 ..., el recordset sobre Tabla1 hay que abrirlo solo con aquellos registros que puedan repartir premios.

Ohhh perfecto. Ahora sí que sí. Y muy bien explicado. Da gusto encontrarse en estos sitios con expertos como tú.

Muchas gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas