muestra..

27/12/2004 - 23:42 por Chente | Informe spam
Que tal Grupo, ojala y alguien sepa como hacer esto porque ya me estoy
volviendo loquito, lo que necesito es sacar el 15% de registros de una
tabla, o sea una muestra de la tabla, donde la muestra debera ser del 15 %.

tengo esto, pero me devuelve mas del 15%

////////////////////////////////////////////////////////////////////////////
////////

declare @maximo int, @minimo int, @registros int, @muestra integer, @hasta
integer

select top 100 *
into #muestra
from tablita

select @registros = count(*) from #muestra

select @maximo = max(nrreporte), @minimo=min(nrreporte) from #muestra

set @muestra = ( round(@registros/(@registros*0.15),1))-1

set @hasta = 1 + round((@registros)*.15,0)*@muestra
select @registros as registros, @maximo as maximo, @minimo as minimo,
@muestra as muestra, @hasta as hasta

select nrreporte, svindice
from #muestra
where (nrreporte-@minimo + 1) % @muestra = 0 and (nrreporte + 1) <(nrreporte+ @hasta)

drop table #muestra

////////////////////////////////////////////////////////////////////////////
////////


Ejemplo: si la tabla tuviera 10 registros y los reportes fueran del 1 al
100, un ejemplo del resultado deseado sería:
3,6,10,11,22,44,46,51,59,66,72,87,89,95,100


Gracias por leer el problema.

MS-SQL2K
SP3a

Saludos.

Vicente López R.

Preguntas similare

Leer las respuestas

#1 Chente
28/12/2004 - 00:05 | Informe spam
Lo del ejemplo de los reportes que iban del 1 al 100 es solo un ejemplo,
porque podria ser tambien que los reportes esten saltaddos, por ejemplo,
344,444,447,490,501,522,552 y asi y sobre eso sacar la muestra.

Gracias.




"Chente" <foro[@]ausa.com.mx> escribió en el mensaje
news:
Que tal Grupo, ojala y alguien sepa como hacer esto porque ya me estoy
volviendo loquito, lo que necesito es sacar el 15% de registros de una
tabla, o sea una muestra de la tabla, donde la muestra debera ser del 15


%.

tengo esto, pero me devuelve mas del 15%




////////////////////////////////////////////////////////////////////////////
////////

declare @maximo int, @minimo int, @registros int, @muestra integer, @hasta
integer

select top 100 *
into #muestra
from tablita

select @registros = count(*) from #muestra

select @maximo = max(nrreporte), @minimo=min(nrreporte) from #muestra

set @muestra = ( round(@registros/(@registros*0.15),1))-1

set @hasta = 1 + round((@registros)*.15,0)*@muestra
select @registros as registros, @maximo as maximo, @minimo as minimo,
@muestra as muestra, @hasta as hasta

select nrreporte, svindice
from #muestra
where ( + 1) % @muestra = 0 and (nrreporte + 1) <> (nrreporte+ @hasta)

drop table #muestra




////////////////////////////////////////////////////////////////////////////
////////


Ejemplo: si la tabla tuviera 10 registros y los reportes fueran del 1 al
100, un ejemplo del resultado deseado sería:
3,6,10,11,22,44,46,51,59,66,72,87,89,95,100


Gracias por leer el problema.

MS-SQL2K
SP3a

Saludos.

Vicente López R.


Respuesta Responder a este mensaje
#2 Javier Carrascal
28/12/2004 - 09:25 | Informe spam
Hola Chente ...

porque no lo intentans con la palabra reservada PERCENT ... algo así:

Select TOP 15 PERCENT *
From Peliculas

si buscas en los BOL, ahí te viene como utilizar dicha cláusula.

Javi


"Chente" <foro[@]ausa.com.mx> escribió en el mensaje
news:
Lo del ejemplo de los reportes que iban del 1 al 100 es solo un ejemplo,
porque podria ser tambien que los reportes esten saltaddos, por ejemplo,
344,444,447,490,501,522,552 y asi y sobre eso sacar la muestra.

Gracias.




"Chente" <foro[@]ausa.com.mx> escribió en el mensaje
news:
> Que tal Grupo, ojala y alguien sepa como hacer esto porque ya me estoy
> volviendo loquito, lo que necesito es sacar el 15% de registros de una
> tabla, o sea una muestra de la tabla, donde la muestra debera ser del 15
%.
>
> tengo esto, pero me devuelve mas del 15%
>
>



////////////////////////////////////////////////////////////////////////////
> ////////
>
> declare @maximo int, @minimo int, @registros int, @muestra integer,


@hasta
> integer
>
> select top 100 *
> into #muestra
> from tablita
>
> select @registros = count(*) from #muestra
>
> select @maximo = max(nrreporte), @minimo=min(nrreporte) from #muestra
>
> set @muestra = ( round(@registros/(@registros*0.15),1))-1
>
> set @hasta = 1 + round((@registros)*.15,0)*@muestra
> select @registros as registros, @maximo as maximo, @minimo as minimo,
> @muestra as muestra, @hasta as hasta
>
> select nrreporte, svindice
> from #muestra
> where ( + 1) % @muestra = 0 and (nrreporte + 1) <> > (nrreporte+ @hasta)
>
> drop table #muestra
>
>



////////////////////////////////////////////////////////////////////////////
> ////////
>
>
> Ejemplo: si la tabla tuviera 10 registros y los reportes fueran del 1 al
> 100, un ejemplo del resultado deseado sería:
> 3,6,10,11,22,44,46,51,59,66,72,87,89,95,100
>
>
> Gracias por leer el problema.
>
> MS-SQL2K
> SP3a
>
> Saludos.
>
> Vicente López R.
>
>


Respuesta Responder a este mensaje
#3 Chente
28/12/2004 - 16:35 | Informe spam
Muchas gracias Javier, es lo que estaba buscando, conocia lo del TOP n pero
no lo de PERCENT, ya con eso es mas facil sacar lo de la forma aleatoria.



Saludos.


Vicente López.


"Javier Carrascal" escribió en el mensaje
news:
Hola Chente ...

porque no lo intentans con la palabra reservada PERCENT ... algo así:

Select TOP 15 PERCENT *
From Peliculas

si buscas en los BOL, ahí te viene como utilizar dicha cláusula.

Javi


"Chente" <foro[@]ausa.com.mx> escribió en el mensaje
news:
> Lo del ejemplo de los reportes que iban del 1 al 100 es solo un ejemplo,
> porque podria ser tambien que los reportes esten saltaddos, por ejemplo,
> 344,444,447,490,501,522,552 y asi y sobre eso sacar la muestra.
>
> Gracias.
>
>
>
>
> "Chente" <foro[@]ausa.com.mx> escribió en el mensaje
> news:
> > Que tal Grupo, ojala y alguien sepa como hacer esto porque ya me estoy
> > volviendo loquito, lo que necesito es sacar el 15% de registros de una
> > tabla, o sea una muestra de la tabla, donde la muestra debera ser del


15
> %.
> >
> > tengo esto, pero me devuelve mas del 15%
> >
> >
>



////////////////////////////////////////////////////////////////////////////
> > ////////
> >
> > declare @maximo int, @minimo int, @registros int, @muestra integer,
@hasta
> > integer
> >
> > select top 100 *
> > into #muestra
> > from tablita
> >
> > select @registros = count(*) from #muestra
> >
> > select @maximo = max(nrreporte), @minimo=min(nrreporte) from #muestra
> >
> > set @muestra = ( round(@registros/(@registros*0.15),1))-1
> >
> > set @hasta = 1 + round((@registros)*.15,0)*@muestra
> > select @registros as registros, @maximo as maximo, @minimo as minimo,
> > @muestra as muestra, @hasta as hasta
> >
> > select nrreporte, svindice
> > from #muestra
> > where ( + 1) % @muestra = 0 and (nrreporte + 1) <> > > (nrreporte+ @hasta)
> >
> > drop table #muestra
> >
> >
>



////////////////////////////////////////////////////////////////////////////
> > ////////
> >
> >
> > Ejemplo: si la tabla tuviera 10 registros y los reportes fueran del 1


al
> > 100, un ejemplo del resultado deseado sería:
> > 3,6,10,11,22,44,46,51,59,66,72,87,89,95,100
> >
> >
> > Gracias por leer el problema.
> >
> > MS-SQL2K
> > SP3a
> >
> > Saludos.
> >
> > Vicente López R.
> >
> >
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida