Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Tue 20 January 2009 16:01

Miss T.
Participant assidu
Lieu: En pleine amazonie...
Date d'inscription: 17 Oct 2005
Messages: 294

Requete de tri A, B, C... AA, AB... au lieu de A, AA, AB...B

Chers géorézotiens,

Voici ma colle du jour: Quelle syntaxe de requête réaliser afin de trier un champ de façon à obtenir la suite A, B, C... puis AA, AB, AC....BA, BB... ??
Sachant que le contenu de la colonne ID, même si la plupart du temps se limite à 2 caractères, peut atteindre 5 caractères (selon le nombre d'objets)

J'ai pensé à la fonction asc qui transforme les caractères en nombre ascii:
SELECT ID, asc(mid$(ID, 1, 1))+asc(mid$(ID, 2, 1))+asc(mid$(ID, 3, 1))+asc(mid$(ID, 4, 1))+asc(mid$(ID, 5, 1))
FROM Test_tri
ORDER BY col2
INTO Tri

Déjà, c'est pas mal puisque ça me donne A, B, C... puis les "ID" à plusieurs caractères.
Sauf que AB et BA donnent tous les deux 131: asc("A") + asc("B") = asc("B") + asc("A")
Et donc ça donne des confusions à partir du moment où il y a plusieurs.

Une idée?

Si certains veulent s'amuser, je vous ai joint un zip avec une table "type" pour essayer...

Dernière modification par Miss T. (Tue 20 January 2009 16:02)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#2 Tue 20 January 2009 17:25

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: Requete de tri A, B, C... AA, AB... au lieu de A, AA, AB...B

Bonjour
Excellente piste !! Ne reste plus qu'à appliquer la bonne vieille et lourdingue méthode....
asc(mid$(ID, 1, 1))+asc(mid$(ID, 2, 1))*10+asc(mid$(ID, 3, 1))*100+asc(mid$(ID, 4, 1))*1000+asc(mid$(ID, 5, 1))*10000

Hors ligne

 

#3 Tue 20 January 2009 18:34

Miss T.
Participant assidu
Lieu: En pleine amazonie...
Date d'inscription: 17 Oct 2005
Messages: 294

Re: Requete de tri A, B, C... AA, AB... au lieu de A, AA, AB...B

La piste est bonne mais concrètement, c'est pas de bol:
AA donne 715
BA donne 716
AB donne 725
BB donne 726
...

Hors ligne

 

#4 Tue 20 January 2009 19:19

Marc-André
Participant assidu
Lieu: Montréal
Date d'inscription: 30 Sep 2005
Messages: 688

Re: Requete de tri A, B, C... AA, AB... au lieu de A, AA, AB...B

Bonjour,

Pourquoi ne pas séparer les lettres simples (A à Z) et les lettres doubles (AA à ZZ)?
Après cela, faire le tri des deux séries ne pose plus de problème. Ensuite, il ne reste qu'à assembler les deux listes avec un copier coller.

Hors ligne

 

#5 Tue 20 January 2009 19:28

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: Requete de tri A, B, C... AA, AB... au lieu de A, AA, AB...B

Bah, c'est juste un mauvais réglage (de ma part)...
Avec: asc(mid$(ID, 1, 1))*10000+asc(mid$(ID, 2, 1))*1000+asc(mid$(ID, 3, 1))*100+asc(mid$(ID, 4, 1))*10+asc(mid$(ID, 5, 1))
AA donne 650000+65000=715000
AB donne 650000+66000=716000
BA donne 660000+65000=725000
BB donne 660000+66000=726000
...et tout rentre dans l'ordre smile

Hors ligne

 

#6 Wed 21 January 2009 10:35

Miss T.
Participant assidu
Lieu: En pleine amazonie...
Date d'inscription: 17 Oct 2005
Messages: 294

Re: Requete de tri A, B, C... AA, AB... au lieu de A, AA, AB...B

Bien vu Maurice. Ceci dit, avec ta formule, j'ai bien A à G puis AA, AB, AC, puis H puis BA, BB puis I, J, K...:
A    650000
B    660000
C    670000
D    680000
E    690000
F    700000
G    710000
AA    715000
AB    716000
AC    717000
H    720000
BA    725000
BB    726000
I    730000
J    740000
K    750000
Z    900000

Avec les coefs suivants:
asc(mid$(ID, 1, 1))*200+asc(mid$(ID, 2, 1))*100+asc(mid$(ID, 3, 1))*50+asc(mid$(ID, 4, 1))*10+asc(mid$(ID, 5, 1))
on obtient:
A    13000
B    13200
C    13400
...
Y    17800
Z    18000
AA    19500
AB    19600
BA    19700
AC    19700
AD    19800
BB    19800
AE    19900
BC    19900
CA    19900
AF    20000
CB    20000
BD    20000
CC    20100
DA    20100
BE    20100
AG    20100
DB    20200
CD    20200
BF    20200
AH    20200
AI    20300
CE    20300
BG    20300
DC    20300
EA    20300

...

Donc on approche car on a A à Z puis les 2 chiffres.
Mais ça foire toujours avec les lettres doubles (BA = AC, AE = BC = CA, etc)
J'arrête pas de trifouiller ces coefs mais je trouve pas...
Help!
(J'ai mis un plus gros jeu de données en PJ)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#7 Wed 21 January 2009 11:03

snaileater
Participant actif
Date d'inscription: 5 Nov 2008
Messages: 121

Re: Requete de tri A, B, C... AA, AB... au lieu de A, AA, AB...B

Euh ... je suis pas un matheux mais ... asc retourne des valeurs entre 0 et 255 donc :

Il faut se mettre en Base ... 256 non ? afin qu'une "lettre" puisse se comporter comme un chiffre ?

Dernière modification par snaileater (Wed 21 January 2009 11:10)

Hors ligne

 

#8 Wed 21 January 2009 11:38

Miss T.
Participant assidu
Lieu: En pleine amazonie...
Date d'inscription: 17 Oct 2005
Messages: 294

Re: Requete de tri A, B, C... AA, AB... au lieu de A, AA, AB...B

Heu, les gars, c'était Marc-André qui était dedans.
Pourquoi faire simple quand on peut faire compliqué?

Et voici donc la solution (Tadaaaaam!):
SELECT ID, len(id)
FROM Sans_nom
ORDER BY col2, col1
INTO Tri
browse * from tri
==> On trie par nombre de caractères puis par les caractères eux-mêmes.

Ce qui donne:
A    1
B    1
C    1
...
Z    1
AA    2
AB    2
AC    2
...
BA    2
BB    2
BC    2
...
CA    2
CB    2
CC    2
...
AAA    3
AAB    3
AAC    3
...
ABA    3
ABB    3
ABC    3

ON EST VRAIMENT DES GROSSES BUSES A L'ESPRIT TORDU! (isn't it?)

Bon, allez, c'est résolu.
MapInfo 1 - cerveau humain 0

Hors ligne

 

#9 Wed 21 January 2009 12:11

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: Requete de tri A, B, C... AA, AB... au lieu de A, AA, AB...B

Chapeau Marc-André, j'aurais dû mieux lire ton intervention... sad
On ne ramait pas dans le bon sens !!

Hors ligne

 

#10 Wed 21 January 2009 13:48

Daniel
Membre
Lieu: Victoriaville, Québec
Date d'inscription: 6 Sep 2005
Messages: 2028

Re: Requete de tri A, B, C... AA, AB... au lieu de A, AA, AB...B

Bonjour

Québec 1 - France 0   big_smile
Bon! pour celle-là.  Pour le reste, j'avoue...  Mais on se débrouille pas pire!!! Bravo! Marc-André!

Allez, bonne journée

Daniel smile


De retour à la géomatique

Hors ligne

 

Pied de page des forums

Powered by FluxBB