Consulta de valores mas altos y agruparlos

210 views
Skip to first unread message

victor velazquez

unread,
Feb 3, 2012, 12:34:35 PM2/3/12
to Comunidad de Visual Foxpro en Español
Hola foxeros buen dia. tengo una incognita en sql

tengo por ejemplo estos valores en una tabla en sql
campos 1
750
620
540
410
300
380
240
125
89
53
22
10

dividiendo entre 4 o entre 3 de todos los registros en este caso 12/4
en este caso 3
y marcar en otra compo el numero ke les corresponda

ejemplo kedaria asi
campos1 campo1
750 a
620 a
540 a
410 a

300 b
380 b
240 b
125 b

89 c
53 c
22 c
10 c

como podria general una consulta similar.. y ponerles ya sea numeros
o letras la idea es identificarlos
espero me haya dado a entender..


MALKASOFT ADPI: http://www.developervfp.blogspot.com/

unread,
Feb 3, 2012, 1:43:19 PM2/3/12
to Comunidad de Visual Foxpro en Español
Hola, no se puede realizar ese tipo de consulta pero si lo puedes
hacer mediante cursores en el mismo SQL, pero yo te recomendaria que
lo hagas en VFP y tienes que definir el rango para la letra A, B, C,
Etc porque si no como decirle que el monto N pertenece a la letra A o
B o C, etc... pero para el monto si es una consulta con Group
by.....si necesitas la consulta del Group by me avisas y te digo como
hacerlo.


Pd.: Descargate mi grilla que tiene multiples funciones como filtrar,
multiseleccion, busqueda, etc del siguiente link
http://www.developervfp.blogspot.com/p/gridlibre-v35.html viene con
codigo fuente, ojo no hacer mal uso por favor.

Saludos;


Ing. Russvell Jesus Soto Gamarra
San Juan del Rio - Queretaro - Mexico
rycjesusrj @ hotmail.com

mpulla

unread,
Feb 3, 2012, 3:04:36 PM2/3/12
to Comunidad de Visual Foxpro en Español
Hola Victor.

No dices con que DB estas trabajando,

Estos 2 select funcionan con la db de VFP

Select Campo1,;
iif(Between(Campo1, 410, 750), 'A', IIF(BETWEEN(campo1, 125, 409),
'B', IIF(BETWEEN(campo1, 0, 124), 'C', 'X'))) As cRango;
From Rs

Si la estructura tu db no te permite hacer algo mejor prueba esto.

Definir otra tabla para los rangos y su identificador algo asi:

CREATE CURSOR rsIdentificador (iInicial I, iFinal I, cIdentificador
C(10))
Insert Into rsIdentificador Values (0, 124)
Insert Into rsIdentificador Values (125, 409)
Insert Into rsIdentificador Values (410, 750)


SELECT Rs.campo1, NVL(RsIdentificador.cidentificador, 'Sin
identificador');
FROM Rs Left JOIN
RsIdentificador ON BETWEEN(Rs.campo1, RsIdentificador.iinicial,
RsIdentificador.ifinal)


Saludos.
Mauricio

Viktor Velazquez

unread,
Feb 3, 2012, 3:12:49 PM2/3/12
to publice...@googlegroups.com
ok gracias mauricio, estoy trabajando con sql server 2008 y vfp 9

> Date: Fri, 3 Feb 2012 12:04:36 -0800
> Subject: [vfp] Re: Consulta de valores mas altos y agruparlos
> From: jmaur...@yahoo.es
> To: publice...@googlegroups.com

Viktor Velazquez

unread,
Feb 3, 2012, 3:16:05 PM2/3/12
to publice...@googlegroups.com
ok gracias ing. lo estoy tratando desde fox...igual gracias por el link lo revisare

> Date: Fri, 3 Feb 2012 10:43:19 -0800

> Subject: [vfp] Re: Consulta de valores mas altos y agruparlos

mpulla

unread,
Feb 3, 2012, 6:19:12 PM2/3/12
to Comunidad de Visual Foxpro en Español
Hola Victor.

Mil disculpas respondí muy a la ligera,

Estoy de salida pero se me ocurre esto

Declare @tValores Table (Campos1 Int)
Declare @liNoRegistros Int, @liNoGrupos Int = 4, @lidiv Int, @tcRango
nVarchar(10) = 'ABCDEFGHIJ'
Set @liNoRegistros = 12
Set @lidiv = @liNoRegistros/@liNoGrupos

insert Into @tValores
Values(750),
(620),
(540),
(410),
(300),
(380),
(240),
(125),
(89),
(53),
(22),
(10)

Select top (@liNoRegistros) Campos1,
ROW_NUMBER() OVER (ORDER BY Campos1 DESC) AS iNoRegistro,
ROW_NUMBER() OVER (ORDER BY Campos1 DESC) / cast(@lidiv As
decimal(18,2)) AS iNoRegistro,
SUBSTRING(@tcRango, (ROW_NUMBER() OVER (ORDER BY Campos1
DESC) / @lidiv)+1, 1) As cGrupo
From @tValores

Como veras la columna iNoRegistroDecimal tiene decimales, entonces si
hay decimales subir a proximo entero y ejecutar el substring sin sumar
1

Campos1 iNoRegistro iNoRegistro cGrupo
750 1 0.333333333333 A
620 2 0.6666666666666 A
540 3 1.0000000000000 B
410 4 1.3333333333333 B
380 5 1.6666666666666 B
300 6 2.0000000000000 C
240 7 2.3333333333333 C
125 8 2.6666666666666 C
89 9 3.0000000000000 D
53 10 3.3333333333333 D
22 11 3.6666666666666 D
10 12 4.00000000000000 E

Espero te ayude.

Saludos.
Mauricio


On 3 feb, 15:16, Viktor Velazquez <vive...@hotmail.com> wrote:
> ok gracias ing. lo estoy tratando desde fox...igual gracias por el link lo revisare
>
>
>
>
>
>
>
> > Date: Fri, 3 Feb 2012 10:43:19 -0800
> > Subject: [vfp] Re: Consulta de valores mas altos y agruparlos
> > From: rycje...@gmail.com
> > To: publice...@googlegroups.com
>
> > Hola, no se puede realizar ese tipo de consulta pero si lo puedes
> > hacer mediante cursores en el mismo SQL, pero yo te recomendaria que
> > lo hagas en VFP y tienes que definir el rango para la letra A, B, C,
> > Etc porque si no como decirle que el monto N pertenece a la letra A o
> > B o C, etc... pero para el monto si es una consulta con Group
> > by.....si necesitas la consulta del Group by me avisas y te digo como
> > hacerlo.
>
> > Pd.: Descargate mi grilla que tiene multiples funciones como filtrar,
> > multiseleccion, busqueda, etc del siguiente link
> >http://www.developervfp.blogspot.com/p/gridlibre-v35.htmlviene con
Reply all
Reply to author
Forward
0 new messages