Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#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

 

Pied de page des forums

Powered by FluxBB