Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Nueva columna con numero de linea en sql (https://www.clubdelphi.com/foros/showthread.php?t=67765)

Playwithfire 05-05-2010 13:38:00

Nueva columna con numero de linea en sql
 
Reconozco que no soy un guru de sql pero llevo 3 dias calentandome la cabeza sin encontrar la solucion.

Necesito una sentencia sql que de esto ...

ID Nombre
-----------------
1 PEPE
2 JUAN
3 ALVARO

Me devuelva

CONT ID Nombre
-------------------------
1 3 ALVARO
2 2 JUAN
3 1 PEPE

Es decir que ordenando por la columna que yo quiera en este caso Nombre,
me devuelva una columna mas con el numero de orden en que se muestra el resultado.

La razon es que uso un listview para mostrar los resultados de la sentencia, en modo ownerdata, y para situarme sobre el registro a mostrar en cada momento Query.recno se hace lentisimo a partir de 20000 registros y he comprobado que con locate es mucho mas rapido.

Gracias.

Casimiro Notevi 05-05-2010 13:52:32

Indistintamente de que hagas el sql como quieres... lo que es una barbaridad es tener más de 20.000 registros en un listview, ¿para qué se necesita hacer eso? :confused:, ¿por qué no filtras antes los registros y trabajas sólo con los que realmente necesitas?, dudo que alguien se ponga en la pantalla a mirar 20.000 registros, no?

Playwithfire 05-05-2010 14:01:55

Creeme los necesito.
Ademas ya lo he probado usando locate en la clave para mostrar la posicion en el listview como he dicho en ownerdata "no lo meto en memoria" y funciona de perlas.

Casimiro Notevi 05-05-2010 14:42:22

Ahora mismo no se me ocurre cómo, aunque seguramente se pueda hacer.
Lo que se me ocurre es un procedimiento almacenado que le pases los parámetros 'desde' y 'hasta' (por ejemplo) y que haga un bucle con una variable que también la devuelva en la salida.

Caro 05-05-2010 16:02:36

Hola Playwithfire, la consulta que se me ocurre es esta, pero el detalle que le veo es que solo te va a enumerar bien si se utiliza un campo que no se repite, en el caso de tu campo nombre puede haber repetidos, en ese caso se va a repetir el mismo número, pruebalo y nos dices si te sirve.

Código SQL [-]
Select ((Select  Count(*) From Tabla t1 Where t1.nombre < t.nombre) + 1) as Enumerar, t.id, t.nombre
From Tabla t
Order By t.nombre

Saluditos

Playwithfire 06-05-2010 00:34:56

Se me queda en un bucle aparentemente infinito, en una tabla de 800 registros :(

Lo maximo que he conseguido ha sido que todos los registros me ponga 1 asi

SELECT (SELECT ROWNUM
FROM Y0899 T1
)AS CONT,Description
FROM Y0899 T2
ORDER BY Description

Se podria conseguir editando los fieldefs del Query? Añadiendo alguno que calcule esto? Si es asi alguien me podria orientar?

Nada no hay forma, llevo toda la mañana machacando el tema. Alguien mas preparado saber por donde puedo tirar?


La franja horaria es GMT +2. Ahora son las 12:29:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi