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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Fri 13 November 2009 13:52

frv
Juste Inscrit !
Date d'inscription: 6 Jan 2006
Messages: 7

identifiants rowid en fonction de critères

Bonjour à tous,
J'ai une table de 270 000 lignes avec un champ comportant des codes. Ces codes correspondent à des parcelles différentes. Il y a en tout 1200 parcelles, soit environ 200 lignes par parcelle.
Je souhaite créer un nouveau champ permettant de faire un rowid pour chaque code de parcelle.
Plus concrètement, ma première parcelle se nomme P1 et comporte 200 lignes, je veux que chaque ligne soit numérotée de 1 à 200. Ma deuxième parcelle se nomme P2 et comporte 215 lignes, je veux que chaque ligne soit numérotée de 1 à 215 etc...pour les 1200 parcelles.
Le problème du Rowid est qu'il va bien me numéroter les lignes, mais de 1 à 270 000 sans discriminer mes codes de parcelle.
EN fait il faudrait trouver une requête qui permette de faire un rowid en fonction du critère code (P1, P2 etc...).
Si vous avez une solution, ça me dépannerait bien...
Bon courage à tous
Franck

Hors ligne

 

#2 Fri 13 November 2009 14:36

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

Re: identifiants rowid en fonction de critères

Bonjour
Sans mbx (à créer) il reste la solution de la fenêtre MapBasic (FMB)
Pour faire le job il faut deux lignes (en supposant que le champ "test" ait été créé avant, en entier):
Select * from ma_table where nom_parcelle="Px" into Sel_x
Update Sel_x Set test = rowid
Soit on prépare (dans Excel) les 1200 fois 2 lignes, on les enregistre en texte, on copie ce texte dans la FMB, on sélectionne tout et on fait 'enter'
Soit les noms sont réguliers et on peut introduire une variable i...toujours dans la FMB:
dim i as integer
i=1
(ces deux premières lignes à sélectionner, puis 'enter')
Select * from ma_table where nom_parcelle="P"+i into Sel_i
Update Sel_i Set test = rowid
print i
i=i+1
On sélectionne ces 4 lignes puis on garde le doigt sut 'enter' en regardant défiler les chiffres dans la boîte de message...et on relâche quand le total est bon (1200 ?)
Dans tous les cas, à la fin enregistrer ma_table smile

Hors ligne

 

#3 Fri 13 November 2009 15:42

frv
Juste Inscrit !
Date d'inscription: 6 Jan 2006
Messages: 7

Re: identifiants rowid en fonction de critères

Je vous remercie, mais je ne crois pas que cette solution réponde à ma question....
Le mieux est que je joigne un extrait du fichier à traiter.
Il comprend deux champs : Id qui correspond à la numérotation automatique que je souhaite obtenir en fonction des parcelles et code_parc qui correspond aux codes des 1200 parcelles

Ce que j'ai                             
Id     code-parc             
        agri_1-1
        agri_1-1
        agri_1-1
        agri_1-2
        agri_1-2
        agri_1-2
        agri_1-2
        agri_1-3
        agri_1-3
        agri_1-3
        agri_2-1
        agri_2-1
        agri_2-1
        etc...

Ce que je souhaite avoir
Id     code-parc             
1        agri_1-1
2        agri_1-1
3        agri_1-1
1        agri_1-2
2        agri_1-2
3        agri_1-2
4        agri_1-2
1        agri_1-3
2        agri_1-3
3        agri_1-3
1        agri_2-1
2        agri_2-1
3        agri_2-1
          etc... 
Merci
Franck

Dernière modification par frv (Fri 13 November 2009 16:07)

Hors ligne

 

#4 Fri 13 November 2009 15:59

Spacejo
Membre
Lieu: Nancy
Date d'inscription: 17 Aug 2008
Messages: 2511

Re: identifiants rowid en fonction de critères

Salut,

Sel_i est une sélection suite à la requète SQL ---> Select * from ma_table where nom_parcelle="P"+i INTO Sel_i
d'ailleurs tu devrais la retrouver si tu regardes dans les tables ouvertes
de même que Sel_x

Dernière modification par Spacejo (Fri 13 November 2009 16:03)

Hors ligne

 

#5 Fri 13 November 2009 17:05

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

Re: identifiants rowid en fonction de critères

Vu l'aspect des noms de parcelles, la seule solution "simple" est le passage par des lignes de commande préparées sous Excel...
On ne peut en effet pas incrémenter simplement - a priori - le nom des parcelles puisque deux éléments changent ...à moins de "réamorcer" le système chaque fois qu'on passe de agri_(x)-n à agri_(x+1)-1...

Hors ligne

 

#6 Sun 15 November 2009 18:03

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

Re: identifiants rowid en fonction de critères

Mon message précédent était bien trop pessimiste....mais c'était vendredi ! On doit pouvoir faire mieux...
On a donc 270000 enregistrements pour 1200 parcelles (225 par parcelle en moyenne)
Une première remarque: le tri sur code-parc, sous MI, ne donnerait pas ce que vous montrez mais:
code-parc
agri_1-1
agri_10-2
agri_100-1
agri_1000-1
agri_1100-2
agri_1200-1
agri_2-1
agri_20-2
agri_200-1
agri_60-3
agri_600-3
agri_80-2
agri_9-2
Le tri se fait sur la première valeur qui suit l'invariant "agri_". Mais on n'a pas besoin de ce tri...
La solution, adaptée de celle que je donnais, est donc d'utiliser la FMB:

Select code_parc from ma_table group by code_parc order by code_parc into Sel_code
print selectioninfo(3)
(ces deux premières lignes à sélectionner, puis 'enter')
Noter la valeur "magique" qui s'affiche: nombre de code_parc distincts dans ma_table

dim kriter as string
dim i as integer
i=1
Fetch First From Sel_code
On sélectionne ces 4 lignes puis 'enter'

kriter = Sel_code.COL1
Select * from ma_table where code_parc=kriter into Sel_k
Update Sel_k Set ID = rowid
print i
i=i+1
Fetch next from Sel_code
On garde le doigt sur 'enter' en regardant défiler les chiffres dans la boîte de message...et on relâche quand le total est bon (égal à la valeur "magique")...ou un peu après si on n'est pas sûr smile

nb: le nom ma_table est bien sûr à adapter

Hors ligne

 

#7 Mon 16 November 2009 10:38

frv
Juste Inscrit !
Date d'inscription: 6 Jan 2006
Messages: 7

Re: identifiants rowid en fonction de critères

Merci Maurice,
Ca a très bien fonctionné. Il reste cependant un problème. Lorsque j'appuie en continu sur ENTRER, j'ai un message d'erreur (opération annulée), ce qui demande, en conséquence, à appuyer 1200 fois sur entrer. Il faut 10', ça se fait mais peut-être y a t'il une solution.
Merci encore

Hors ligne

 

#8 Mon 16 November 2009 16:23

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

Re: identifiants rowid en fonction de critères

Euh...??
Peut être laisser un peu plus de temps (voire le maximum possible) en jouant sur la fréquence de répétition des touches (dans les paramètres clavier du panneau de configuration). Il faut à chaque fois une sélection puis sa mise à jour: ce n'est pas instantané ...

Hors ligne

 

#9 Wed 18 November 2009 16:47

frv
Juste Inscrit !
Date d'inscription: 6 Jan 2006
Messages: 7

Re: identifiants rowid en fonction de critères

nickel, c'était ça !
Merci c'était bien ça le problème

Dernière modification par frv (Wed 18 November 2009 16:48)

Hors ligne

 

Pied de page des forums

Powered by FluxBB