Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 Fri 11 November 2022 09:57

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 993

QGIS: Calculer un ID ordonne depuis un champ

Salut à tous,

Je dois calculer un champ d'identifiant ordonné selon les valeurs d'un autre champ.
J'arrive bien à le faire en SQL avec cette syntaxe :

Code:

SELECT ROW_NUMBER() OVER(ORDER BY MonChamp)
FROM MaTable

Mais ça m'oblige à créer une couche virtuelle pour ensuite rappatrier les valeurs via une jointure dans ma table.
Est-il possible de le faire directement avec la calculatrice de champs ?
Je n'y ai trouvé que la variable @row_number , mais je ne sais pas si on peut l'affiner en précisant un champ de tri ?

Merci pour vos conseils smile


Sylvain M.

Hors ligne

 

#2 Fri 11 November 2022 10:42

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 993

Re: QGIS: Calculer un ID ordonne depuis un champ

C'est bon, j'ai trouvé ça ici :

Code:

array_find(
           array_agg($id,
                     order_by:="ORDER_FIELD"),
           $id)
        +1

Ça marche très bien ! big_smile


Sylvain M.

Hors ligne

 

#3 Fri 11 November 2022 10:52

Sylvain M.
Participant assidu
Lieu: Saint-Pierre-des-Nids (53)
Date d'inscription: 8 Sep 2005
Messages: 993

Re: QGIS: Calculer un ID ordonne depuis un champ

Bon, j'ai quand même une petite "question bonus" : comment faire un ORDER BY MonChamp DESC avec la fonctionn array_agg ?
J'y suis parvenu puisque mon champ de tri et numérique, en le multipliant par -1, mais si j'avais eu un champ TXT, ça n'aurait pas fonctionné.

Code:

array_find(
           array_agg($id,
                     order_by:="MonChamp"*-1),
           $id)
        +1

Si quelqu'un a une écriture plus propre et qui fonctionne avec les champs TXT, je prends !


Sylvain M.

Hors ligne

 

Pied de page des forums

Powered by FluxBB