#1 Thu 20 September 2007 17:15
- Miss T.
- Participant assidu
- Lieu: En pleine amazonie...
- Date d'inscription: 17 Oct 2005
- Messages: 294
Concaténation
Bonjour à tous,
Question bête: comment concaténer les données de plusieurs colonnes? ==> Les doigts dans le nez.
Question à 2 euros: comment concaténer les données d'une même colonne quand les points sont redondants (sauf 2 champs)?
Explication: j'ai reçu un jeu de données où les points se superposaient mais où les données sont différentes.
Ce que je voudrais c'est une requête de mise à jour du genre:
Si la localisation est la même, et que la colonne "truc" a la même valeur alors concatène la colonne "machin" dans un seul enregistrement.
exemple de 3 points (qui se superposent) :
ID localisation truc machin
----------------------------------------------------------------------------
1 Trifouilli truc1 chocolat
2 Trifouilli truc2 poulet
3 Trifouilli truc1 camembert barraqué
après requête donnent: (on se fout de l'ID final)
ID localisation truc machin
----------------------------------------------------------------------------
13 Trifouilli truc1 chocolat; camembert barraqué
2 Trifouilli truc2 poulet
(J'espère que j'aurai été assez claire dans mes explications...)
Une idée?
Géomatiquent vôtre...
Miss T.
Hors ligne
#2 Thu 20 September 2007 21:58
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Concaténation
Bonjour
J'adore l'humour des bords de l'étang de Thau ...
Je suis d'avis de simplement rendre à Excel ce qu'il sait faire (emploi de conditions dans les formules) quand le pauvre MI doit appeler MapBasic à la rescousse pour le même résultat...
Exemple après un exportation de la table en dbf, sous un autre nom:
sous Excel, après un tri sur localisation et truc, appliquer à une 5° colonne la formule
=SI(ET(LC2=L(1)C2;LC3=L(1)C3);CONCATENER(LC4;";";L(1)C4);SI(LC2=L(-1)C2;SI(LC3=L(-1)C3;"F";LC(4));LC4))
(nb: sur la première ligne, puis recopier vers le bas ... et faire la dernière ligne à la main, j'ai pas le temps de peaufiner )
Copier et collage spécial valeur pour finir. Enregistrer en dbf (attention à la zone à définir en base_de_données: 5 colonnes!!)
Une jointure avec la table d'origine sur le ID nous donnera tout autant de points, mais avec en plus le bon attribut
Il suffit enfin de sélectionner les points ayant "F" en colonne 5 et de les supprimer pour ne garder que les "utiles"
Hors ligne
#3 Sat 22 September 2007 10:45
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Concaténation
Pas de nouvelle = bonne nouvelle ??
Hors ligne
#4 Mon 24 September 2007 11:00
- Olivier T
- Participant actif
- Date d'inscription: 31 May 2006
- Messages: 71
Re: Concaténation
Bonjour,
le produit catésien de la table peut peut être vous aider
En ouvrant une copie de la tabe et en la croisant sur elle même, on devrait arriver à vos souhaits
Code:
Select Sans_nom.id, Sans_nom.loc, Sans_nom.truc, Sans_nom.machin,Sans_nom.machin+Copie_de_Sans_nom.machin from Sans_nom, Copie_de_Sans_nom where Sans_nom.loc=Copie_de_Sans_nom.loc and Sans_nom.truc=Copie_de_Sans_nom.truc group by Sans_nom.truc into Selection Browse * From Selection
à creuser
bonne journée
Hors ligne
#5 Mon 24 September 2007 13:05
- Miss T.
- Participant assidu
- Lieu: En pleine amazonie...
- Date d'inscription: 17 Oct 2005
- Messages: 294
Re: Concaténation
Merci pour cette réponse Maurice mais je pensais avoir la possibilité de faire ça sous mapInfo, quitte à passer par la fenêtre MapBasic (même pas peur! j'ai fait du MapBasic il y a quelques années mais il va me falloir quelques rappels (no souçailles! Ca va vite revenir)...)
Genre si "count(*) GROUP BY truc, localisation" est sup. à 1, alors la table (ou nouvelle table) garde le 1er enregistrement avec truc et localisation et il ajoute à la colonne machin toutes les valeurs des autres enregistrements (en les supprimant pour virer les redondances).
Je pensais faire ça sous MapBasic pour éventuellement en faire un mbx "anti-redondance" bien barraqué.
PS: tu connais l'humour Thausien?
Hors ligne
#6 Mon 24 September 2007 13:19
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Concaténation
Pas de problème !!
C'est faisable en mbx, mais à mon avis pas vraiment trivial !!
ps: l'humour Thausien rayonne jusqu'à Montpellier
Hors ligne
#7 Mon 24 September 2007 19:36
- Miss T.
- Participant assidu
- Lieu: En pleine amazonie...
- Date d'inscription: 17 Oct 2005
- Messages: 294
Re: Concaténation
Je vais essayer ça. Merci Olivier.
Hors ligne
#8 Mon 24 September 2007 21:45
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Concaténation
Le produit cartésien d'Olivier T marche en partie puisque la colonne machin sera répétée même si il y a une seule occurrence de localisation+truc ... et ne prendra pas en compte les cas où il y a une seule occurrence de localisation
Ce dernier "défaut" peut être corrigé en ajoutant Sans_nom.loc à la clause Group By
Il faut trouver un truc pour nettoyer le premier défaut, genre sélection des cas où la première moitié à gauche est égale à la seconde moitié à droite, puis remplacer la première moitié par "vide"...
nb: on obtient toujours un tableau de données, qu'il faudra joindre à la table de points, puis il faudra supprimer les points où machin+machin est vide
ps: tout ça en mbx, comme je disais: pas infaisable mais assez "coton"
Hors ligne
#9 Wed 26 September 2007 17:01
- Miss T.
- Participant assidu
- Lieu: En pleine amazonie...
- Date d'inscription: 17 Oct 2005
- Messages: 294
Re: Concaténation
Je vous avoue messieurs que je n'ai pas eu le temps de tester... Bon sang! Pourquoi les journées sont si courtes?!
Je vous tient au courant dès que je peux m'y coller...
Hors ligne
#10 Thu 27 September 2007 09:53
- lennydolle
- Juste Inscrit !
- Lieu: Nantes
- Date d'inscription: 6 Sep 2007
- Messages: 1
Re: Concaténation
Bonjour
J'ai bien lu les messages récents sur la concaténation sous MI ou Excel mais je rencontre qq soucis pour appliquer ces formules... surtout sous excel d'ailleurs.
Voici mon fichier et ce que je souhaite faire
Code com Nom de la commune NOM_GARE
1 89001 ACCOLAY ACCOLAY
2 89441 VERMENTON ACCOLAY
3 21005 AISEREY AISEREY
4 21067 BESSEY-LES-CITEAUX AISEREY
5 21319 IZEURE AISEREY
6 89004 AISY-SUR-ARMANCON AISY
7 89296 PERRIGNY-SUR-ARMANCON AISY
8 21530 ROUGEMONT AISY
J'aimerais obtenir une ligne par Nom de gare avec un champ où serait listé toutes les communes désservies
soit pour la gare ACCOLAY un champ avec les noms de com ACCOLAY et VERMENTON
MErci pour vos éclaircissements
Hors ligne
#11 Thu 27 September 2007 12:28
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Concaténation
Bonjour
J'ai déplacé votre message
C'est du boulot pour Excel, pas pour MapInfo (à mon sens)
D'abord un rapport de tableau croisé dynamique, puis une (ou deux) formules pour faire une "belle" concaténation
Je joins le classeur Excel qui explicite tout ça (les formules y figurent)
Bien sur en fonction du nombre de gares, la formule risque de devenir trop longue. Pour cette méthode il faudra découper en lots à traiter
Mais il y a peut être des solutions plus élégantes ....
Hors ligne