Pages: 1
- Sujet précédent - Création de séquence qui boucle sur chaque valeur différente[postgres] - Sujet suivant
#1 Mon 23 July 2018 15:28
- bruhnild
- Participant actif
- Lieu: Lyon
- Date d'inscription: 7 Jun 2014
- Messages: 130
Création de séquence qui boucle sur chaque valeur différente[postgres]
Bonjour à toutes et à tous,
J'aimerais pouvoir incrémenter une séquence à 5 chiffres qui redémarre à 1 à chaque nouvelle valeur de sro.
Pour le moment ma séquence s'incrémente bien de 1 à 99999 mais sans tenir compte des différentes valeurs de sro (il y en a 138)
Voici ma séquence:
Code:
DROP SEQUENCE IF EXISTS gracethd_metis.t_noeud_incrementation_nd_code; CREATE SEQUENCE gracethd_metis.t_noeud_incrementation_nd_code INCREMENT 1 MINVALUE 00000 MAXVALUE 99999 START 1 CACHE 1; ALTER TABLE gracethd_metis.t_noeud OWNER TO postgres;
Et voici mon with :
Code:
WITH vue_metier AS ( SELECT concat(digt_6, digt_7, digt_8, digt_9) as sro ,'SF' as nb_type FROM rbal.bal_hsn_point_2154 a LEFT JOIN psd_orange.ref_code_zasro b ON a.nom_sro=b.code_sro_definitif) SELECT concat('ND700',sro , to_char(nextval('gracethd.t_noeud_incrementation_nd_code'), 'FM00000')) as nd_code, sro, nb_type, FROM vue_metier
Dans le principe je pense qu'il faudrait utiliser une boucle for, le problème est que je ne vois pas comment l'utiliser ensuite dans mon concat..
Code:
create or replace function fetcher (n integer) returns void as $$ declare sro record; begin for sro in select cd_sro from (with code_sro as (select concat(digt_6, digt_7, digt_8, digt_9) as cd_sro from psd_orange.ref_code_zasro) select cd_sro from code_sro)a limit n loop raise notice '%', sro.cd_sro; end loop; end; $$language plpgsql;
Auriez vous des pistes à ce sujet?
Merci d'avance pour vos contributions!
Marine.
Dernière modification par bruhnild (Mon 23 July 2018 15:29)
Hors ligne
#2 Mon 23 July 2018 15:48
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Création de séquence qui boucle sur chaque valeur différente[postgres]
Bonjour,
Utilisez une windows function pour cela, comme row_number(), qui vous permet de donner un numéro de lignes a un ensemble de valeurs:
row_number() over (partition by sro order by ...)
Nicolas
Hors ligne
#3 Thu 26 July 2018 17:09
- bruhnild
- Participant actif
- Lieu: Lyon
- Date d'inscription: 7 Jun 2014
- Messages: 130
Re: Création de séquence qui boucle sur chaque valeur différente[postgres]
Bonjour, merci pour l'idée, ça fonctionne!
Code:
WITH vue_metier AS ( SELECT concat(b.digt_6, b.digt_7, b.digt_8, digt_9) as sro ,'SF' as nb_type FROM rbal.bal_hsn_point_2154 a, psd_orange.zasro_hsn_polygon_2154 b WHERE ST_CONTAINS (b.geom, a.geom)) SELECT row_number() over (partition by sro ) as id ,concat('ND700',sro , to_char(row_number() over (partition by sro ), 'FM00000')) as nd_code ,sro ,nb_type FROM vue_metier
Dernière modification par bruhnild (Thu 26 July 2018 17:10)
Hors ligne
Pages: 1
- Sujet précédent - Création de séquence qui boucle sur chaque valeur différente[postgres] - Sujet suivant