Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Dividir los registros de 1 tabla en 3 consultas SQL..ayuda please..

Estas en el tema de Dividir los registros de 1 tabla en 3 consultas SQL..ayuda please.. en el foro de Bases de Datos General en Foros del Web. necesito hacer 3 consultas sql en la que cada una de ellas me obtenga una parte de los registros de una tabla. En la primera ...
  #1 (permalink)  
Antiguo 17/02/2005, 03:32
Avatar de cokete  
Fecha de Ingreso: noviembre-2004
Mensajes: 224
Antigüedad: 20 años, 2 meses
Puntos: 0
Dividir los registros de 1 tabla en 3 consultas SQL..ayuda please..

necesito hacer 3 consultas sql en la que cada una de ellas me obtenga una parte de los registros de una tabla. En la primera el primer tercio, la segunda el segundo tercio y la tercera el tercer tercio... No se como poder hacer esto ya que solo conozco la sentenca TOP que solo me deja cojer los x primeros registros... Muchas Gracias.
  #2 (permalink)  
Antiguo 17/02/2005, 06:35
Avatar de yeti  
Fecha de Ingreso: octubre-2004
Ubicación: España, Madrid
Mensajes: 152
Antigüedad: 20 años, 3 meses
Puntos: 0
usando "rowid" en cualquier tabla puedes sacar en las select los 'N' registros q quieras.
Si la tabla tiene 30 registros, aces :
select * from nombre_tabla where rowid < 10

esto para la primera tanda (primer tercio) y asi sucesibamente. estoy casi seguro deq esasi, si tienes algun provlema comentalo aqui, bye
__________________
Cuando creas que no hay solución posible, busca en los foros, siempre en mejor tener a la red mundial de tu parte
  #3 (permalink)  
Antiguo 17/02/2005, 06:43
Avatar de yeti  
Fecha de Ingreso: octubre-2004
Ubicación: España, Madrid
Mensajes: 152
Antigüedad: 20 años, 3 meses
Puntos: 0
acabo de mirar en un manual q tengo q con cursores si se puede hacer pero no veo el modo de acerlo en una select
__________________
Cuando creas que no hay solución posible, busca en los foros, siempre en mejor tener a la red mundial de tu parte
  #4 (permalink)  
Antiguo 17/02/2005, 06:47
Avatar de Sir Matrix  
Fecha de Ingreso: octubre-2000
Ubicación: Dentro de mi cabeza. ono?
Mensajes: 1.264
Antigüedad: 24 años, 3 meses
Puntos: 3
el rowid en qué motor de base de datos funciona?

en sql server no funciona....

Saludos
__________________
|||| ))>_<(( ||||
www.webmagic.cl <-- esta pagina está mala, no la busquen
  #5 (permalink)  
Antiguo 17/02/2005, 11:29
Avatar de cableh  
Fecha de Ingreso: diciembre-2004
Mensajes: 54
Antigüedad: 20 años, 1 mes
Puntos: 0
Para ms SQL Server puedes hacer un procedimiento almacenado desde el cual pasándole un parámetro especificamos que parte de la tabla queremos devolver. En el procedimiento crearemos un tabla temporal con la misma estructura de la tabla original y le añadiremos un campo identity (que nos servirá como contador de los registros), cargamos los datos de la tabla original en la temporal y hacemos la select oportuna.

Te mando un ejemplo:

Tenemos un tabla de clientes donde:


IdCliente ---> int
NombreCliente ---> varchar(100)

y nuestro procedimiento almacenado:


ALTER PROCEDURE DevuelveClientes
(
@Pagina int -- (valores de 0 para el primer tercio,
-- 1 para el segundo y 2 para el tercero)
)
AS

-- Creamos la tabla temporal con un nuevo campo identity (insertará
-- automática y consecutivamente valores desde el 1)

CREATE TABLE #TempClientes
(
ID int IDENTITY, -- nuevo campo
IdCliente int,
NombreCliente varchar(100)

)

-- insertamos los registros de la tabla cliente en la temporal

insert into #TempClientes (IdCliente,NombreCliente)
select IdCliente,NombreCliente
from Clientes order by NombreCliente

-- Calculamos el número total de registros de la tabla y cuanto supone cada tercio
declare @Tercio int
declare @nreg int

select @nreg=count(*),@Tercio=count(*)/3 from clientes

-- Calculamos el primer registro y último registro
declare @PrimerRegistro int
declare @UltimoRegistro int

set @PrimerRegistro=@Pagina*@Tercio+1
set @UltimoRegistro=(@Pagina+1)*@Tercio

-- nos aseguramos que en el último tercio devuelva todos los registros
if @Pagina=3
set @UltimoRegistro=@nreg

-- Devolvemos los registros que necesitamos
select * from #TempClientes
where id>=@PrimerRegistro and id<@UltimoRegistro

-- fin procedimiento

Este procedimiento lo podríamos hacer más general añadiendo un parámetro de tamaño de la página.

Quizás quede un poco complicado y haya otra forma de hacerlo más fácil, pero yo creo que esto funcionará, espero que te sirva.

Salu2.

Última edición por cableh; 17/02/2005 a las 11:33
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:24.