Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   número de fila de una consulta. (https://www.clubdelphi.com/foros/showthread.php?t=72105)

JAI_ME 27-01-2011 22:00:27

número de fila de una consulta.
 
buenas tardes me gustaria saber si hay alguna forma de enumerar las filas del resultado de una consulta hecha en firebird.
ejemplo

el resultado original de una consulta es.

nombre tel
______________
pepe 100
maria 200
claudia 102
pedro 334


y quiero me salga así

con nombre tel
___________________
1 pepe 100
2 maria 200
3 claudia 102
4 pedro 334


mil gracias.

roman 27-01-2011 22:12:36

Dependiendo del componente que uses para traer los resultados podrías usar un campo calculado al que le asignas la propiedad RecNo del dataset en el evento OnCalcFields.

// Saludos

Casimiro Notevi 28-01-2011 00:04:02

También puedes usar un 'store procedure', por ejemplo, si tenemos la tabla:
tbProvincias
codigo integer
nombre varchar(32)

Creamos el store procedure:

Código SQL [-]
SET TERM ^ ;

CREATE or alter PROCEDURE prueba  
RETURNS 
 ( contador integer, codigo integer, nombre varchar(32) )
AS 
BEGIN
  contador = 0;
  for select codigo, nombre
      from TBPROVINCIAS
      order by nombre, codigo
      into :codigo, :nombre
  do 
  BEGIN
    contador = :contador+1;
    suspend;  
  end
END^

SET TERM ; ^

Lo ejecutamos:
Código SQL [-]
select * from prueba

Y el resultado será algo así:


JAI_ME 28-01-2011 01:06:40

gracias por su respuesta, la idea es que en la misma consulta o en el mismo SQL me muestre el número de cada registro.

JAI_ME 28-01-2011 02:04:46

simplemente en la consulta no se puede ?
si necesidad de procedimientos almacenados.

Casimiro Notevi 28-01-2011 02:20:50

Nunca lo he visto, aunque lo mismo hay algún rebuscado truco para poder conseguirlo. Lo dudo, pero todo es posible.

JAI_ME 28-01-2011 03:57:03

bueno muchisimas gracias, de todas forma sigo atento a sus respuestas.

abelg 31-01-2011 20:57:19

no estoy seguro si funciona en Interbase, pero en Sql Server funciona.

Select Rank= COUNT(*), c1.id_cliente, c1.nombre, c1.fechanac
from Cliente c1, Cliente c2
where c1.id_cliente >= c2.id_cliente
group by c1.id_cliente, c1.nombre, c1.fechanac
order by Rank

ocram 05-02-2011 01:44:19

Que tal amigo, no sé si te sirva pero en SQL server existe una sentencia llamada ROW_NUMBER y en tu caso quedaria asi

SELECT ROW_NUMBER() OVER (ORDER BY NOMBRE) AS con, NOMBRE, TEL
FROM DATOS

y aun asi no cumpliria con todas tus necesidades ya que esta funcion le asignaria un numero pero basado en su orden alfabetico "(order by nombre)"

entonces te quedaria asi:

con nombre tel
___________________
4 pepe 100
2 maria 200
1 claudia 102
3 pedro 334

rgstuamigo 07-02-2011 22:38:54

Prueba así:
Código SQL [-]
Select @Fila := @Fila + 1 as Nro_de_Fila,t.Nombre, t.Tel From MyTable t, (SELECT @Fila:=0) f;
A mí me funciona perfectamente en MySQL...;)
Ojalá te sirva...:)
Saludos...:)


La franja horaria es GMT +2. Ahora son las 11:31:37.

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