Combinar ASCENDING y DESCENDING en un único índice compuesto

76 views
Skip to first unread message

Juan Pablo Martín Peinado

unread,
Jan 18, 2017, 6:11:56 AM1/18/17
to Comunidad de Visual Foxpro en Español
Buenas, necesito crear un índice compuesto por 2 campos de un cursor. El índice debe ordenar el primer campo ASCENDING y el segundo DESCENDING. ¿Es esto posible?

He probado con:

INDEX ON articulo ASCENDING + STR(largo) DESCENDIG TAG articulo OF &lcCDX

Pero me da error.

¿Alguna sugerencia?


---------------------------------------
Juan Pablo Martín Peinado
Guadalajara - España
---------------------------------------

Jose Antonio Blasco

unread,
Jan 18, 2017, 6:38:55 AM1/18/17
to Comunidad de Visual Foxpro en Español
Puedes probar si funciona

INDEX ON articulo + STR(largo*-1) ASCENDIG TAG articulo OF &lcCDX

Un saludo.


Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2

Jose Antonio Blasco

unread,
Jan 18, 2017, 6:40:37 AM1/18/17
to Comunidad de Visual Foxpro en Español
Una cosa más, para que funcione correctamente "largo" debería tener siempre la misma longitud.

Un saludo.


Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


Jose Antonio Blasco

unread,
Jan 18, 2017, 6:42:38 AM1/18/17
to Comunidad de Visual Foxpro en Español
Jejeje, creo que he "patinado".   STR() por omisión da una longitud de 10.

Sorry...


Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


Juan Pablo Martín Peinado

unread,
Jan 18, 2017, 7:02:17 AM1/18/17
to Comunidad de Visual Foxpro en Español
Gracias Jose, pero el truco NO ha funcionado. No me ordena el largo de mayor a menor.

---------------------------------------
Juan Pablo Martín Peinado
Guadalajara - España
---------------------------------------

Juan Pablo Martín Peinado

unread,
Jan 18, 2017, 7:07:26 AM1/18/17
to Comunidad de Visual Foxpro en Español
Pero me has encendido la bombilla, jeje.

Así si funciona:

INDEX ON articulo + STR(1000000 - largo) ASCENDING TAG articulo OF &lcCDX

---------------------------------------
Juan Pablo Martín Peinado
Guadalajara - España
---------------------------------------

El miércoles, 18 de enero de 2017, 12:42:38 (UTC+1), Jose Antonio Blasco escribió:

ZeRoberto

unread,
Jan 18, 2017, 7:12:01 AM1/18/17
to publicesvfoxpro
INDEX ON articulo + TRANSFORM(largo, "@L 9999999") ASCENDING TAG articulo OF &lcCDX

Juan Pablo Martín Peinado

unread,
Jan 18, 2017, 7:27:44 AM1/18/17
to Comunidad de Visual Foxpro en Español
Gracias Ze Roberto, pero esto tampoco me ordena el largo de mayor a menor.

---------------------------------------
Juan Pablo Martín Peinado
Guadalajara - España
---------------------------------------

ZeRoberto

unread,
Jan 18, 2017, 12:51:10 PM1/18/17
to publicesvfoxpro
No entendi muy bien nos puedes mostrar como seria tu tabla?

Articulo                             Largo
--------------------------------   ---------
DORITOS                                9
PEPINOS                                2
TOMATES                                2
ELOTE                                 10

Y como quieres que se te ordene?

Saludos

Juan Pablo Martín Peinado

unread,
Jan 19, 2017, 3:52:40 AM1/19/17
to Comunidad de Visual Foxpro en Español
Hola Ze Roberto. Siguiendo con tu ejemplo, te pongo como debería de quedar, teniendo en cuenta que cada artículo puede estar repetido varias veces:

Articulo                             Largo
--------------------------------   ---------
DORITOS                               12
DORITOS                                9
ELOTE                                 10
ELOTE                                  5
PEPINOS                               20
PEPINOS                               15
PEPINOS                                3
TOMATES                                2

Te comento que ya lo resolví creando un índice de la siguiente forma:

INDEX ON articulo + STR(1000000 - largo) TAG articulo OF &lcCDX

---------------------------------------
Juan Pablo Martín Peinado
Guadalajara - España
---------------------------------------

ZeRoberto

unread,
Jan 19, 2017, 3:57:04 AM1/19/17
to publicesvfoxpro
Probaste con esto?

INDEX ON articulo + TRANSFORM(largo, "@L 9999999") DESCENDING TAG articulo OF &lcCDX

Juan Pablo Martín Peinado

unread,
Jan 19, 2017, 4:39:28 AM1/19/17
to Comunidad de Visual Foxpro en Español
Acabo de probarlo, pero de esta forma me lo ordena todo DESCENDING, tanto los artículos como su largo.

---------------------------------------
Juan Pablo Martín Peinado
Guadalajara - España
---------------------------------------

ZeRoberto

unread,
Jan 19, 2017, 7:10:39 AM1/19/17
to publicesvfoxpro
Solo quedaria asi

Index On Articulo + TRANSFORM(100000 - Largo, "@L 9999999") Tag Articulo ASCENDING

Saludos

ZeRoberto

unread,
Jan 19, 2017, 7:15:49 AM1/19/17
to publicesvfoxpro
Create Cursor dbTempo (Articulo C(30), Largo N(5))

Insert Into dbTempo (Articulo, Largo) Values ("PEPINOS", 20)
Insert Into dbTempo (Articulo, Largo) Values ("TOMATES", 2)
Insert Into dbTempo (Articulo, Largo) Values ("DORITOS", 12)
Insert Into dbTempo (Articulo, Largo) Values ("PEPINOS", 3)
Insert Into dbTempo (Articulo, Largo) Values ("ELOTE", 10)
Insert Into dbTempo (Articulo, Largo) Values ("DORITOS", 9)
Insert Into dbTempo (Articulo, Largo) Values ("ELOTE", 5)
Insert Into dbTempo (Articulo, Largo) Values ("PEPINOS", 15)

Select  dbTempo
Index On Articulo + TRANSFORM(100000 - Largo, "@L 9999999") Tag Art ASCENDING

Browse
Reply all
Reply to author
Forward
0 new messages