Consultas : Numerar una consulta
|
Autor/es: Màrius Puig |
| Pregunta : Quiero crear un campo calculado en una consulta y que numere los registros correlativamente ¿es esto posible? |
Respuesta : Sí. Mediante el siguiente metodo es posible numerar los registros en una consulta. Para que sea mas claro usaremos el siguiente ejemplo.
Partimos de una tabla (Tabla1) con 2 campos (Dato1,Dato2 - ambos texto/10); con los siguientes datos: |
Tabla1 | Dato1 | Dato2 | | Hola | 1 | | Adiós | 2 | | Hasta luego | 2 | | Buenas | 1 |
|
| la idea seria conseguir mediante una consulta el siguiente resultado: |
Consulta1 | RegNum | Dato1 | Dato2 | | 1 | Hola | 1 | | 2 | Adios | 2 | | 3 | Hasta luego | 2 | | 4 | Buenas | 1 |
|
| Para crear el "numero de orden" usaremos esta función: |
Public Function numerarSQL(nDato) As Long
'variable que no se pierde entre las distintas llamadas
Static nORDEN As Integer
If IsNull(nDato) Then 'si nDato es nulo: variable a cero y salida
nORDEN = 0
Exit Function
End If
nORDEN = nORDEN + 1
numerarSQL = nORDEN
End Function
|
| Hacemos la consulta con el siguiente SQL: |
SELECT numerarSQL([Dato1]) AS RegNum, * FROM Tabla1
|
Si ejecutamos la consulta nos dará la numeración de registros correlativa pero con el inconveniente de que si volvemos a ejecutarla el primer RegNum ya no será el 1, pues la variable Static nOrden sigue almacenando los datos entre las distintas llamadas a la función.
Debemos indicarle a la función que queremos empezar desde el numero 1, lo haremos con el siguiente SQL: |
SELECT numerarSQL(Null), * FROM Tabla1 WHERE 1=0
|
| Como no nos interesa tener dos consultas independientes, las juntamos en una sola con la clausula UNION, quedando así: |
SELECT numerarSQL([Dato1]) AS RegNum, * FROM Tabla1
UNION ALL
SELECT numerarSQL(Null), * FROM Tabla1 WHERE 1=0
|
| Con esto ya tendremos una consulta con los registros numerados. |
Ejemplos: |
Temas relacionados: |