#1 Tue 01 March 2022 15:55
- Patricia_85
- Participant occasionnel
- Lieu: Bourges
- Date d'inscription: 6 Apr 2012
- Messages: 10
Postgresql - PgAdmin - transposer des lignes en colonnes
Bonjour,
Je ne suis pas sûre que l'intitulé corresponde vraiment à ma question mais je ne sais pas comment le formuler différemment
J'ai un tableau du style
id | nom
A | aa
B | aa
C | bb
C | cc
C | dd
Je souhaiterai obtenir un tableau de la forme suivante :
id | nom_1 | nom_2 | nom_3
A | aa | |
B | aa | |
C | bb | cc | dd
Je ne suis pas très performante sur PostgreSQL, auriez-vous une solution à me proposer.
Merci d'avance pour votre retour
Hors ligne
#2 Tue 01 March 2022 16:38
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1536
Re: Postgresql - PgAdmin - transposer des lignes en colonnes
Bonjour,
Pas super facile de faire ca, comme ca de tête.
regardez du coté de tablefunc, qui fait des transposition de lignes en colonnes, mais cela nécessite une colonne de plus dans votre requete: https://www.postgresql.org/docs/14/tablefunc.html
Nicolas
Hors ligne
#3 Tue 01 March 2022 16:41
- Patricia_85
- Participant occasionnel
- Lieu: Bourges
- Date d'inscription: 6 Apr 2012
- Messages: 10
Re: Postgresql - PgAdmin - transposer des lignes en colonnes
Merci Nicolas,
C'est sympa, je vais regarder.
Bonne fin de journée
Hors ligne
#4 Tue 01 March 2022 16:45
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1536
Re: Postgresql - PgAdmin - transposer des lignes en colonnes
Si vous connaissez le nombre de valeurs différentes dans la colonne nom, vous pouvez faire qqch comme:
Code:
with tmp as ( select id, nom from ( values ('A', 'aa'),('B', 'aa'),('C', 'bb'),('C', 'cc'),('C', 'dd') ) as v (id, nom) ), tmp1 as ( select id, array_agg(nom) as noms from tmp group by id ) select id, noms[1] as col1, noms[2] as col2, noms[3] as col3 from tmp1 order by id; id col1 col2 col3 A aa B aa C bb cc dd
Sinon, vous pouvez le faire avec une fonction ou un bout de code plsql anonyme.
Nicolas
Hors ligne
#5 Wed 02 March 2022 11:30
- ppluvinet
- Participant assidu
- Lieu: LYON
- Date d'inscription: 6 Aug 2007
- Messages: 608
Re: Postgresql - PgAdmin - transposer des lignes en colonnes
Bonjour,
Je ne réponds pas directement à la question car je vous apporte une solution en passant par le logiciel R :
https://www.r-bloggers.com/2016/09/resh … -and-cast/
Toutefois, pour ceux qui connaissent pas R, ca peut s'avérer très efficace en très peu de lignes de commande !
Bon courage,
Dernière modification par ppluvinet (Wed 02 March 2022 11:31)
Pascal PLUVINET
Hors ligne
#6 Wed 02 March 2022 11:47
- Patricia_85
- Participant occasionnel
- Lieu: Bourges
- Date d'inscription: 6 Apr 2012
- Messages: 10
Re: Postgresql - PgAdmin - transposer des lignes en colonnes
Bonjour,
Nicolas,
Merci pour Crosstab, j'ai trouvé dans la donnée le champ manquant qui me permet d'utiliser cette fonction
et Merci pour la fonction anonyme que je conserve précieusement au cas où.
Pascal,
Merci pour l'info, je commence tout juste une formation sur R, alors je conserve aussi le lien.
Bonne journée
Patricia
Hors ligne