#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: 1554
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 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
Hors ligne