#1 Sat 20 November 2021 11:05
- Kiecane
- Participant actif
- Date d'inscription: 31 Oct 2021
- Messages: 91
QGIS: besoin aide jointure
Bonjour,
Je rencontre un léger problème avec ma table attributaire (cf image jointe). J'ai effectué une jointure de 2 tables (l'une contenant le champ y et l'autre les champs y_2 et AUTO : cf image jointe) pour que lorsque y est inférieur à la première valeur la plus grande de y_2 et supérieure à la seconde valeur la plus grande du champ y_2, alors le champ AUTO correspondant affiche 4. Ensuite, lorsque y est inférieur à la seconde valeur la plus grande de y_2 et supérieure à la troisième valeur la plus grande du champ y_2, alors le champ AUTO correspondant affiche 3. Et ainsi de suite. Le soucis, c'est que je ne sais pas comment coder le fait que je choisisse la première valeur la plus grande de y_2 puis la seconde ect. dans la calculatrice des champs. J'avais pensé à quelque chose comme ça :
CASE
IF "y"<(1ere valeur la plus grande de y_2) AND "y">(2ere valeur la plus grande de y_2)
THEN "AUTO"='4'
IF "y"<(2ere valeur la plus grande de y_2) AND "y">(3ere valeur la plus grande de y_2)
THEN "AUTO"='3'
ect.
END
Je me dis qu'il y a même peut-être moyen de faire une boucle mais je ne sais pas trop comment m'y prendre. Je sais qu'il serait possible de passer par du SQL mais je préfère utiliser la calculatrice des champs dans la mesure où je souhaite réaliser un modeleur graphique et c'est plus simple d'utiliser la calculatrice des champs dans ce cas (en tout cas pour moi)
Je vous remercie d'avance !
Hors ligne
#2 Sun 21 November 2021 16:16
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3939
Re: QGIS: besoin aide jointure
Bonjour,
Je regarde la pièce jointe et ne sais pas trop quoi en déduire; y_2 est carrément vide donc à quoi correspondent les 2eme et 3eme plus grandes valeurs auxquelles vous faites référence ?
Si je comprends votre code, l'idée c'est de classer les valeurs de y_2, et comparer y à celles-ci. Selon le rang obtenu, on assigne la valeur AUTO qui décroît. Or la valeur AUTO part de 4 et vous avez plus que 4 entités. Que se passe-t-il si y_2(6)< y < y_2(5)? Et comment gerez-vous l'égalité (soit entre y et y_2 ou si y_2 a plusieurs valeurs identiques), les valeurs nulles? Bref, il y a peut-être encore quelques points à ajuster dans le concept.
Toutefois, pour ce qui est du comment, (pas testé mais...) les fonctions array peuvent permettre de créer une liste des valeurs de y_2, y ajouter la valeur y en cours, trier et renvoyer l'index de la valeur y (donc son classement) dans cette liste triée.
Une autre option (peut-être plus facile), utiliser la fonction aggregate (count) pour compter le nombre de valeurs y_2 supérieures à y et déduire la position donc AUTO. Attention aux doublons y_2...
Hors ligne