Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   select con columna autoincrental (https://www.clubdelphi.com/foros/showthread.php?t=69906)

rfernandez 17-09-2010 10:20:06

select con columna autoincrental
 
Buenas a todos y todas,

Necesito hacer una select donde la primera columna sea un autoincremental que empieze en 1 y continue en incrementos de 1.
Lo que necesito es tener una columna que me diga el numero de fila que representa esa fila.

Algo asi

select contador, codigo from articulos order by codigo

resultado -->

contado codigo
1 art1
2 art10
3 bec23
......

Gracias

ARPE 17-09-2010 10:38:45

Hola, se me ocurre una chapucilla. Genérate un generador llamado por ejemplo contador, antes de la consulta dices:
set generator contador to 0;
y en la consulta dices:
Select gen_id(contador, 1), codigo
from articulos
order by codigo;

(de todas formas el "recno" en algún tipo de tabla también funciona)

Saludos

Caro 17-09-2010 16:07:46

Hola rfernandez, prueba con esta consulta:

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

tu campo codigo no debe tener repetidos y mejor si colocas un filtro en el where si tienes muchos registros.

Saluditos

rfernandez 20-09-2010 16:05:17

Gracias a los dos, haré pruebas.
La segunda opción me da que desde el punto de rendimiento va a ser muy pesada de ejecutar para consultas con muchos datos.

Gracias nuevamente.

guillotmarc 21-09-2010 15:01:17

La otra solución es crear un procedimiento almacenado, con un bucle FOR SELECT, e ir incrementando un contador en cada iteración del bucle.

Saludos.

Delfino 23-09-2010 15:30:10

Si vas a mostrar los datos mediante Delphi puedes crear un campo calculado y le asignas el RecNo del Dataset asociado..

rfernandez 23-09-2010 18:13:59

El Recno, como mínimo con TQuery de BDE contra Firebird no funciona.
Sobre el proceso almacenado es una opción pero tengo esta necesidad para multiples consultas y si tengo que hacer un SP para cada una es un latazo.

me estoy planteando cargar un TClientDataSet a traves de la consulta y hay hacer el numerador.

Gracias a todos.

guillotmarc 23-09-2010 21:11:39

Cita:

Empezado por rfernandez (Mensaje 377294)
El Recno, como mínimo con TQuery de BDE contra Firebird no funciona.
Sobre el proceso almacenado es una opción pero tengo esta necesidad para multiples consultas y si tengo que hacer un SP para cada una es un latazo.

me estoy planteando cargar un TClientDataSet a traves de la consulta y hay hacer el numerador.

Gracias a todos.

Si como dices, conectas tu TQuery a un TClientDataset vía un TDatasetProvider, entonces podrás utilizar el RecNo del ClientDataset, que funciona perfectamente.

Saludos.

rastafarey 07-10-2010 05:32:35

Resp
 
Haste y procedimiento almacenado.

Y si te preocupa que no puedas lanzar intrucciones de insercion actualizacion u elimincacion sobre dicho procedimiento. Complemeta el procedimiento con una vista actualizable.


La franja horaria es GMT +2. Ahora son las 09:42:13.

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