Asignar número en ORDEN del resultado de una consulta

En el resultado de una consulta asignar el "1º" al resultado más alto y así sucesivamente-

1 Respuesta

Respuesta
1

Este enlace de Mihura, en él lo explica de forma sencilla: http://www.accessaplicaciones.com/ejemplos.html#sq02

O puedes ver estas otras respuestas:

Autonumerar de acuerdo a campos repetidos

Campo que indique orden de registros de consulta

Y seguro que hay más, porque es un tema que se trató bastante en este foro.

Un saludo.


http://nksvaccessolutions.com/academy/ 

¡Gracias! 

Sigo sin conseguir entender lo que me envías, creo busco algo más sencillo, te pongo mi consulta

SELECT [Inscripciones Consulta Consulta].Jugador, [Inscripciones Consulta Consulta].ResultadoPR
FROM [Inscripciones Consulta Consulta]
GROUP BY [Inscripciones Consulta Consulta].Jugador, [Inscripciones Consulta Consulta].ResultadoPR
ORDER BY [Inscripciones Consulta Consulta].ResultadoPR DESC;

Necesito crear un campo calculado que me diga quien es el 1º, 2º, etc

En el enlace de Mihura tienes explicado lo que debes hacer: copiar la función en un módulo, y liego hacer la consulta de unión como la del ejemplo (obviamente con tus campos más la llamada a la función)

En el primero de los enlaces a otra respuestas, tienes cómo hacerlo usando la función DCount. Solo tienes que añadir un campo a tu consulta con esa función, y como criterio poner un campo que sea único por registro.

Dado que tu quieres establecer el orden en una consulta de datos agrupados, vas a tener que hacerlo sobre una nueva consulta sobre esa consulta.

sigo sin entenderte, llevo 20 años haciendo bases de datos, pero no escribo código nunca, ¿es posible me hables sin usar código?

SELECT [Inscripciones Consulta Consulta].Jugador, [Inscripciones Consulta Consulta].ResultadoPR
FROM [Inscripciones Consulta Consulta]
ORDER BY [Inscripciones Consulta Consulta].ResultadoPR DESC;

Claro que te puedo hablar sin escribir código, porque el código ya lo tienes en los enlaces que te pasé, y repetirlo me parece una tontería.

Pero si quieres código, no hay problema, ahí te lo dejo, y explicado pasito a pasito sobre el primer enlace (ya verás que no era tan difícil):

1º/ En el ejemplo dice:

La rutina la tenemos que crear en un módulo independiente:

Copias la siguiente función en un módulo independiente (imagino que sabrás cómo):

 
'--------------------------------------------------------------------------------------------- 
' Autor : JESUS MANSILLA CASTELLS -Mihura-    
'--------------------------------------------------------------------------------------------- 
Public Function RT_NumerarSQL(nDato) As Long 
'variable que no se pierde entre las distintas llamadas 
Static nORDEN As Long 
     If IsNull(nDato) Then 'si nDato es nulo: variable a cero y salida 
         nORDEN = 0 
         Exit Function 
     End If 
     nORDEN = nORDEN + 1 
     RT_NumerarSQL = nORDEN 
End Function 

2º/ Sigue el ejemplo:

¿Cómo funciona?:
- Primero le pasamos un valor nulo, esto hace que se inicie a cero la variable estática que será nuestro contador
- Después al pasarle un valor distinto de nulo simplemente suma una unidad a la variable estática anterior y nos la devuelve como valor de la función.
Para dar los dos pasos a la vez usaremos una consulta de unión:
     SELECT Id, Nombre, RT_NumerarSQL(Null) AS NumOrden FROM TFacturas WHERE 1 = 0 
     UNION ALL 
     SELECT Id, Nombre, RT_NumerarSQL(Id) AS NumOrden FROM TFacturas 

Como te decía solo tienes que crear la consulta de unión siguiendo el modelo. Además, luego te decía que en tu caso, por ser de totales, mejor sería hacerlo con una nueva consulta.

En tu caso, si tu consulta se llama CResultado, quedaría:

SELECT Jugador, ResultadoPR, RT_NumerarSQL(Null) AS NumOrden FROM CResultado WHERE 1 = 0 
UNION ALL 
SELECT Jugador, ResultadoPR, RT_NumerarSQL(Jugador) AS NumOrden FROM CResultado

que como comprobarás, es idéntica a la del ejemplo, pero con tus campos y tablas/consultas.

3º/ Guardas y ya tienes tu consulta numerada.

me da este error nombre ambiguo, en la expresión de consulta 'RT_NumerarSQL(Null'.

¿No copiarías dos veces la función, no? Ese error me hace suponerlo...

como puedo comprobarlo, te pido disculpas, desconozco ese aspecto

En los módulos que tengas en la BD si la tienes repetida.

O desde el editor de VBA, Menú Depuración -> Compilar NombreBD

Ahora me salta este mensaje"Referencia circular causada por 'CResultado'.

Hay algo que no haces bien... Ese error puede ser porque tengas dos consultas que se llaman igual, o a la nueva consulta también la llamas CResultado...

Mira este ejemplo, y haz lo mismo: https://drive.google.com/file/d/15u0WNvgL01SRCYI4D7cOyB9YRkyE61Ct/view?usp=sharing  

¡Gracias! por tu paciencia para torpes como yo...por fin lo he conseguido. Mil gracias

¿Sería posible si tuviesen la misma puntuación, compartieran número de orden?

Con ese sistema no, quizás usando la función DCount() lo consigas, habría que probarlo...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas