#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 ![]()
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: 1566
Re: [PostgreSQL] Disposition de colonnes
Bonsoir,
Oui, c'est possible ![]()
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 12000Nicolas
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 ![]()
Hors ligne


