PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

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

#1 04/01/2013 02:43:49

youssef
Membre

seq pour chaque code

Bonjour à tous 

j'ai un petit problème.

dans une table j'ai plusieurs lignes avec une colonne département,
et je veux ajouter un colonne code composé ( unique ) qui sera composé de la concaténation du code  departement et d'une sequence.
par exemple

 
75-1
75-2
75-3
...
59-1
59-2
59-3 

est il possible de le faire avec des sequences ( sans créer 90 sequences, 1e pour chaque département )
ou faut il faire appel à des fonctionnalités plus poussées 

Merci d'avance

Hors ligne

#2 04/01/2013 10:12:39

gleu
Administrateur

Re : seq pour chaque code

Le plus simple est certainement la séquence. Je ne vois pas d'autres méthodes s'il s'agit de donner cette valeur sans avoir à la recalculer à partir des valeurs déjà données.


Guillaume.

Hors ligne

#3 04/01/2013 10:15:10

youssef
Membre

Re : seq pour chaque code

mais pour ça il faut créer plusieurs sequence ou une seule ?
y a t il une façon de le faire sous forme d'une boucle ?

Hors ligne

#4 04/01/2013 10:24:38

gleu
Administrateur

Re : seq pour chaque code

mais pour ça il faut créer plusieurs sequence ou une seule ?

Une par département à priori, d'après votre exemple.

y a t il une façon de le faire sous forme d'une boucle ?

Va falloir donner plus de détails pour répondre à cette question.


Guillaume.

Hors ligne

#5 04/01/2013 11:04:09

youssef
Membre

Re : seq pour chaque code

Une sequence par département, avec 90 departement
c'est un peu trop à saisie manuellement

pour la boucle, est ce qu'il y a possibilité de créer les séquences à partir d'une requête 
un peu comme

create sequence  'seq_'||(select dep from dep) ;

Hors ligne

#6 04/01/2013 11:37:38

rjuju
Administrateur

Re : seq pour chaque code

Vous devez utiliser une procédure stockée pour ça (ou une fonction anonyme si vous êtes en postgres >=9.0).

Hors ligne

#7 04/01/2013 17:32:03

youssef
Membre

Re : seq pour chaque code

rjuju a écrit :

une procédure stocké.

merci pour la réponse,
voilà, il est temps de pousser l'apprentissage et commencer à apprendre le PL/pgSQL tongue

Hors ligne

#8 04/01/2013 20:18:18

dverite
Membre

Re : seq pour chaque code

En PostgreSQL moderne (>=8.4) on peut utiliser row_number() plutôt que des séquences ou du code:

select  departement||'-'||row_number() over ( partition by departement) FROM ....

Hors ligne

#9 07/01/2013 11:30:18

youssef
Membre

Re : seq pour chaque code

merci dverite
ça marche très bien, je dois consacrer plus de temps aux fonctions window pour mieux les appréhender

Hors ligne

Pied de page des forums