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_metierDans 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: 1566
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_metierDerniè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


