Vous n'êtes pas identifié(e).

#1 23/05/2014 16:26:29

Géronimo
Membre

[9.3] nommer les récursions d'une requête récursive

Bonjour à tous,

Voici ma requête :

WITH RECURSIVE en_aval(profondeur, code_zone, id_nd_ini, id_nd_fin, geom) AS (
 SELECT 1, code_zone, id_nd_ini, id_nd_fin, geom
  FROM essai_pl
UNION ALL
  SELECT ea.profondeur + 1, e.code_zone, e.id_nd_ini, e.id_nd_fin, e.geom
  FROM en_aval  AS ea, essai_pl AS e 
  WHERE e.id_nd_fin = ea.id_nd_ini
)
SELECT row_number()OVER()::integer AS gid, * FROM en_aval

Dans la colonne "profondeur" de cette requête, il m'est indiquer un numéro pour chaque récursion (1 pour la première, 2 pour la seconde, 3 pour la troisième,...). J'aimerais remplacer ce numéro par l'identifiant de la zone où est pratiquée chaque récursion (code_zone). Il s'agit d'une chaîne de caractère sous la forme : lettre numéro numéro numéro.

Je vous remercie pour vos futures réponses.

Géronimo

Hors ligne

#2 23/05/2014 17:20:56

Géronimo
Membre

Re : [9.3] nommer les récursions d'une requête récursive

Et voilà la réponse :

WITH RECURSIVE en_aval(profondeur, code_zone, id_nd_ini, id_nd_fin, geom) AS (
SELECT  MAX(code_zone) OVER () AS  profondeur, code_zone, id_nd_ini, id_nd_fin, geom FROM essai_pl
    UNION ALL
        SELECT  MAX(e.code_zone)  OVER () AS  profondeur, e.code_zone, e.id_nd_ini, e.id_nd_fin, e.geom
        FROM    en_aval  AS ea
        INNER JOIN essai_pl AS e 
        ON  e.id_nd_fin = ea.id_nd_ini)
SELECT  ROW_NUMBER() OVER()::integer AS gid, profondeur, code_zone, id_nd_ini, id_nd_fin, geom FROM en_aval;

Bon week-end !

Hors ligne

Pied de page des forums