Pages: 1
- Sujet précédent - QGIS 2.18.13: Regrouper des champs/concatener/condition Si - Sujet suivant
#1 Tue 10 October 2017 18:09
- Kili444
- Juste Inscrit !
- Date d'inscription: 10 Oct 2017
- Messages: 8
QGIS 2.18.13: Regrouper des champs/concatener/condition Si
Bonjour,
Je suis tout nouveau en matière de SIG et sur ce forum. J'ai plusieurs problèmes qui se posent à moi sur QGIS.
J'ai plusieurs champs de la Bd topo qui m'intéresse pour des libellés de route: nom_de_voie_g ; nom_de_voie_d; numero; inseecom_g ; inseecom_d
Tout cela dans le but d'obtenir un nouveau champs "libellé" suivant plusieurs règle de formatage.
A savoir:
Quand j'ai les champs "nom_de_voie_g ; nom_de_voie_d" de remplis mon champs final doit reprendre le style suivant: "nom_de_voie_g"_"inseecom_g" (le nom de la voie Under score le code insee)
Quand j'ai seulement le champs " nom_de_voie_d" de remplis je veux le même résultat mais avec: "nom_de_voie_d"_"inseecom_d"
et quand je n'ai ni "nom_de_voie_g" ni "nom_de_voie_d" de remplis je veux que mon champs final prenne le champs "numeros"_"Insee"
Je n'arrive à rien avec la calculatrice de champs, je ne voit absolument pas comment utiliser la fonction "if" pour faire des "si".
Votre aide me serez du plus grand bien
Je veux en faire créer un nouveau champs suivant les valeurs d'autres champs.
Bonne journée, Merci d'avance
Hors ligne
#2 Tue 10 October 2017 20:52
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: QGIS 2.18.13: Regrouper des champs/concatener/condition Si
Salut,
les ifs dans la calculatrice de champ s'utilise comme une fonction :
Code:
if(condition, valeurSiVrai, valeurSiFaux)
On peut imbriquer les ifs comme suit
Code:
if(condition1, if(condition2, valeurSiCond2Vrai, valeurSiCond2Faux), valeurSiCond1faux)
Cela equivaut en pseudo code :
Code:
SI condition1 ALORS SI condition2 ALORS valeur1siCond2Vrai SINON valeur2siCond2Faux FIN SI SINON valeurSiCond1Faux FIN SI
Vous avez aussi la structure de contrôle CASE :
Code:
CASE WHEN condition1 THEN valeur1 WHEN condition2 THEN valeur2 CASE ELSE valeurElse END
Vous avez aussi la fonction coalesce qui renverra la premiere valeur non-nulle d'une liste d'argument
Code:
coalsece(valeur1Nulle, valeur2Nulle, valeur3NonNulle, valeur4NonNulle, valeur5Nulle)
Cet exemple renverra valeur3NonNulle.
Dernière modification par tumasgiu (Tue 10 October 2017 20:52)
Hors ligne
#3 Wed 11 October 2017 09:13
- Kili444
- Juste Inscrit !
- Date d'inscription: 10 Oct 2017
- Messages: 8
Re: QGIS 2.18.13: Regrouper des champs/concatener/condition Si
Bonjour je n'arrive même pas à créer un nouveau champ et le renseigner avec 0 ou 1 suivant si un autre champ contient des valeurs ou non.
If("mon_champ" IS NULL,
'1',
'0')
Il m'affiche systématiquement pour toutes les valeurs 0, à savoir systématiquement la valeur sifaux.
Dernière modification par Kili444 (Wed 11 October 2017 09:13)
Hors ligne
#4 Wed 11 October 2017 15:14
- Xavier Julian
- Participant assidu
- Lieu: Orange
- Date d'inscription: 19 Jan 2015
- Messages: 218
Re: QGIS 2.18.13: Regrouper des champs/concatener/condition Si
Bonjour,
Il s'agit deux deux conditions IF imbriquées, ce code devrait marcher :
Code:
if("nom_de_voie_g" is null AND "nom_de_voie_d" is null, if("nom_de_voie_g" is not null AND "nom_de_voie_d" is not null,"nom_de_voie_g" || "_" || "inseecom_g", "nom_de_voie_d" || "_" || "inseecom_d"), "numeros" || "_" ||"Insee")
++
Dernière modification par Xavier Julian (Wed 11 October 2017 15:15)
Hors ligne
#5 Wed 11 October 2017 15:47
- Kili444
- Juste Inscrit !
- Date d'inscription: 10 Oct 2017
- Messages: 8
Re: QGIS 2.18.13: Regrouper des champs/concatener/condition Si
Ok je pense voir plus ou moins l'idée.
Et pour simplement faire un nouveau avec 0 ou 1 pour savoir s'il y a des données ou non dans un autre champs. pourquoi faire tous simplement cela ne marche pas ???
If("mon_champ" IS NULL,
'1',
'0')
Merci d'avance
Hors ligne
#6 Wed 11 October 2017 15:53
- Xavier Julian
- Participant assidu
- Lieu: Orange
- Date d'inscription: 19 Jan 2015
- Messages: 218
Re: QGIS 2.18.13: Regrouper des champs/concatener/condition Si
Cela devrait pourtant marcher.
"mon_champ" est-il vraiment remplit ?
Hors ligne
#7 Wed 11 October 2017 16:18
- Kili444
- Juste Inscrit !
- Date d'inscription: 10 Oct 2017
- Messages: 8
Re: QGIS 2.18.13: Regrouper des champs/concatener/condition Si
Autant pour mo
If("mon_champ" IS NULL,
'1',
'0')
Pour cette simple requête ça fonctionne
Hors ligne
#8 Thu 12 October 2017 08:33
- Kili444
- Juste Inscrit !
- Date d'inscription: 10 Oct 2017
- Messages: 8
Re: QGIS 2.18.13: Regrouper des champs/concatener/condition Si
Maintenant je voudrais "concaténer" (je ne sais pas si c'est le bon terme) 2 champs.
Ex: dans un champ "libellé" je veux que le résultat soit le regroupement de 2 champs
"champ1"_"champ2"
Je ne suis pas sur de la syntaxe exacte à adopter, à moins d'utiliser la fonction "concatenate" de la calculatrice de champ ???
Pouvez-vous m'aider ?
Cordialement
Hors ligne
#9 Thu 12 October 2017 09:13
- Xavier Julian
- Participant assidu
- Lieu: Orange
- Date d'inscription: 19 Jan 2015
- Messages: 218
Re: QGIS 2.18.13: Regrouper des champs/concatener/condition Si
Bonjour,
Le code que je vous ai donné en #4 est complet, l'avais vous au moins essayé ??
Le signe || remplace la fonction concat.
Hors ligne
#10 Thu 12 October 2017 09:19
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: QGIS 2.18.13: Regrouper des champs/concatener/condition Si
http://lmgtfy.com/?q=concatenate+qgis+field+calculator
trois façons :
l'opérateur || : chaine1 || '_' || chaine2
l'opérateur + (dispo à partir de QGIS 2.6) : chaine1 + '_' + chaine2
la fonction concatenate : concatenate(chaine1, '_', chaine2)
Hors ligne
#11 Thu 12 October 2017 09:34
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3947
Re: QGIS 2.18.13: Regrouper des champs/concatener/condition Si
Bonjour,
la fonction concatenate : concatenate(chaine1, '_', chaine2)
la fonction concat plutôt, non? concatenate étant utilisée dans la logique des fonctions aggregate (itération sur toutes les entités).
A noter que || renverra systématiquement null si une des entrées est null alors que concat renverra le reste. a voir selon ce que vous souhaitez
Hors ligne
#12 Thu 12 October 2017 10:01
- Kili444
- Juste Inscrit !
- Date d'inscription: 10 Oct 2017
- Messages: 8
Re: QGIS 2.18.13: Regrouper des champs/concatener/condition Si
Merci je vais tester tout cela
Hors ligne
#13 Thu 12 October 2017 10:24
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: QGIS 2.18.13: Regrouper des champs/concatener/condition Si
Bonjour,
tumasgiu a écrit:
la fonction concatenate : concatenate(chaine1, '_', chaine2)
la fonction concat plutôt, non? concatenate étant utilisée dans la logique des fonctions aggregate (itération sur toutes les entités).
A noter que || renverra systématiquement null si une des entrées est null alors que concat renverra le reste. a voir selon ce que vous souhaitez
Exact, j'ai tapé un peu vite comme à mon habitude.
Important également de mettre en avant le caractère absorbant de la valeur null quand on utilise certaines opérations
(on peut utiliser coalesce pour contourner ce "problème")
Dernière modification par tumasgiu (Thu 12 October 2017 10:56)
Hors ligne
Pages: 1
- Sujet précédent - QGIS 2.18.13: Regrouper des champs/concatener/condition Si - Sujet suivant