#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
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
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