#1 Mon 06 July 2020 13:10
- Seiya70
- Juste Inscrit !
- Date d'inscription: 6 Jul 2020
- Messages: 2
QGIS: fonction Case when
Bonjour,
Dans ma table attributaire d'un cadastre, j'ai calculé l'exposition a partir d'un MNT, celle ci s'exprime avec une valeur numérique allant de 0 à 360 qui correspond au Nord.
Mon but est de noté cette valeur par exemple si la valeur d'exposition est de 180, la parcelle aura une note de 10.
j'ai en tout 9 intervalles de notation.
toute fois quand je rentre ma formule aucun résultat n’apparaît, pourtant je n'est pas de message d'erreur
j'ai essayer plusieurs versions de cette formule et je ne sais plus quoi faire pour que sa marche.
https://www.casimages.com/i/200706095854146686.jpg.html
Hors ligne
#2 Mon 06 July 2020 13:11
- Seiya70
- Juste Inscrit !
- Date d'inscription: 6 Jul 2020
- Messages: 2
Re: QGIS: fonction Case when
Bonjour
Je cherche a créer un nouveau champ qui comportera une note suivant les valeur d'un des champ de ma table attributaire.
exemple : si mon champ de référence a une valeur comprise entre 0 et 25 alors le nouveau champ aura comme valeur 1
voila la Fonction que j'ai écrite :
CASE
WHEN "orient_mea" IN ('0','25') THEN "note_orien" = 1
WHEN "orient_mea" IN ('25','65') THEN "note_orien" = 2.5
WHEN "orient_mea" IN ('65','115') THEN "note_orien" = 5
WHEN "orient_mea" IN ('115','155') THEN "note_orien" = 7.5
WHEN "orient_mea" IN ('155','205') THEN "note_orien" = 10
WHEN "orient_mea" IN ('205','245') THEN "note_orien" = 7.5
WHEN "orient_mea" IN ('245','295') THEN "note_orien" = 5
WHEN "orient_mea" IN ('295','335') THEN "note_orien" = 2.5
WHEN "orient_mea" IN ('335','360') THEN "note_orien" = 1
ELSE "note_orien" = NULL
END
je n'est pas d’erreur d'afficher dans l'aperçu de résultat
mais quand je lance cette requête, le champ ne se remplis pas.
Que dois je faire ?
Hors ligne
#3 Mon 06 July 2020 13:32
- GlaDal
- Participant assidu
- Date d'inscription: 30 Aug 2013
- Messages: 1052
Re: QGIS: fonction Case when
J'aurais écrit :
CASE
WHEN "orient_mea" IN ('0','25') THEN "note_orien" = 1
WHEN "orient_mea" IN ('25','65') THEN "note_orien" = 2.5
WHEN "orient_mea" IN ('65','115') THEN "note_orien" = 5
WHEN "orient_mea" IN ('115','155') THEN "note_orien" = 7.5
WHEN "orient_mea" IN ('155','205') THEN "note_orien" = 10
WHEN "orient_mea" IN ('205','245') THEN "note_orien" = 7.5
WHEN "orient_mea" IN ('245','295') THEN "note_orien" = 5
WHEN "orient_mea" IN ('295','335') THEN "note_orien" = 2.5
WHEN "orient_mea" IN ('335','360') THEN "note_orien" = 1
ELSE NULL
END
Vérifiez que vous n'avez pas fait de sélection dans votre table.
Hors ligne
#4 Mon 06 July 2020 14:01
- EnilecT
- Participant occasionnel
- Date d'inscription: 11 Mar 2018
- Messages: 24
Re: QGIS: fonction Case when
Bonjour,
"orient_mea" IN ('0','25') ne va être vrai que si la valeur correspond exactement à 0 ou à 25.
J'aurais plutôt utilisé :
Code:
CASE WHEN "orient_mea" >= 0 AND "orient_mea" < 25 THEN "note_orien" = 1 WHEN "orient_mea" >= 25 AND "orient_mea" < 65 THEN "note_orien" = 2.5 ...
Vérifiez aussi que votre champ "orient_mea" est bien un champ de type numérique et pas chaîne de caractère.
Hors ligne
#5 Mon 06 July 2020 16:59
- dominique.lys
- Participant assidu
- Date d'inscription: 5 Oct 2006
- Messages: 473
- Site web
Re: QGIS: fonction Case when
La bonne syntaxe est
Code:
CASE WHEN "orient_mea" IN ('0','25') THEN 1 ... END
L'expression retourne une valeur, mais ce qui sera fait de cette valeur dépend du contexte (calcul d'un champs, définition d'une propriété de style ...). Il n'y a donc pas lieu d'indiquer le nom du champs à calculer
Hors ligne
#6 Mon 06 July 2020 17:07
- carteq
- Participant assidu
- Date d'inscription: 8 Mar 2008
- Messages: 829
Re: QGIS: fonction Case when
Au plus court :
Code:
CASE WHEN "orient_mea" <= 25 THEN 1 WHEN "orient_mea" <= 65 THEN 2.5 (etc...) ELSE NULL END
Il ne sert à rien de tester les 2 limites de la classe : les entités testées à la première condition ne sont plus dans le lot pour la 2e, et ainsi de suite.
Dernière modification par carteq (Mon 06 July 2020 17:08)
Hors ligne