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 Mon 06 April 2020 16:27

preliator
Participant assidu
Date d'inscription: 17 Nov 2018
Messages: 433

[PostgreSQL] Disposition de colonnes

Bonjour à tous,

Disposant d'une base de donnée, je voudrais passer de ceci ...

Code:

INSEE_COM; DENSITE_POP; ALTITUDE; REVENUS

01001; 125; 425; 15000
01002; 156; 125; 20000
01004; 30; 650; 12000

...à ceci

Code:

INSEE_COM; CARACTERISTIQUES; VALEURS

01001; DENSITE_POP; 125
01001; ALTITUDE; 425
01001; REVENUS; 15000
01002; DENSITE_POP; 156
01002; ALTITUDE; 125
01002; REVENUS; 20000
.
.
.

Est-il possible de faire ceci sur PosgreSQL ?

Merci smile

Dernière modification par preliator (Mon 06 April 2020 16:49)

Hors ligne

 

#2 Mon 06 April 2020 19:04

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: [PostgreSQL] Disposition de colonnes

Bonsoir,

Oui, c'est possible wink

Par exemple en regroupant les différentes valeurs dans un tableau, en créant un tableau avec les intitulés des valeurs (les noms des colonnes),
puis en explosant les éléments des 2 tableaux en lignes (rows) avec unnest:
(les types des colonnes "valeurs" doivent etre les mêmes, ou alors il faut passer par leur représentation en texte pour pouvoir les stocker dans un tableau)

Code:

with tmp as (
    select * from (
        values ('01001', 125, 425, 15000),
                ('01002', 156, 125, 20000),
                ('01004', 30, 650, 12000)) 
         as v(insee_com, densite_pop, altitude, revenus)
) select t.insee_com, 
           unnest(array['densite_pop', 'altitude', 'revenus']) as caracteristiques,
           unnest(array[densite_pop, altitude, revenus]) as valeurs
from tmp t;

insee_com    caracteristiques    valeurs
01001        densite_pop            125
01001        altitude               425
01001        revenus                15000
01002        densite_pop            156
01002        altitude               125
01002        revenus                20000
01004        densite_pop            30
01004        altitude               650
01004        revenus                12000

Nicolas

Hors ligne

 

#3 Mon 06 April 2020 19:36

preliator
Participant assidu
Date d'inscription: 17 Nov 2018
Messages: 433

Re: [PostgreSQL] Disposition de colonnes

Merci beaucoup pour votre réponse, toujours aussi claire smile

Hors ligne

 

Pied de page des forums

Powered by FluxBB