Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#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