#1 Tue 24 November 2020 17:00
- preliator
- Participant assidu
- Date d'inscription: 17 Nov 2018
- Messages: 433
pivot_table dynamique sur Postgre ?
Bonjour,
Je dispose d'une table, qui caractérise des individus décrits par un identifiant, et des variables qui se répètent pour chacun d'entre eux. Voici un exemple reproductible similaire
Code:
create temp table if not exists ma_table ( code_iris text, cat text, valeur numeric ); insert into ma_table values ('id_1', 'cat_1', 12), ('id_1', 'cat_2', 6), ('id_1', 'cat_3', 4), ('id_2', 'cat_1', 5), ('id_2', 'cat_2', 2), ('id_2', 'cat_3', 1), ('id_3', 'cat_1', 2), ('id_3', 'cat_2', 4), ('id_3', 'cat_3', 44);
Je souhaite pivoter cette table, de manière à n'avoir qu'une ligne par identifiant. Ainsi, les modalités de la colonne "cat" deviendraient des colonnes.
A ce jour, je connais quelques manières d'y arriver, notamment :
Code:
select code_iris, sum(case cat when 'cat_1' then valeur end) as cat_1, sum(case cat when 'cat_2' then valeur end) as cat_2, sum(case cat when 'cat_3' then valeur end) as cat_3 from ma_table group by 1 order by 1
L'énorme inconvénient, c'est le fait que je suis obligé de taper chaque modalité. Dans le cas où j'en ai plusieurs dizaines, cela me semble compliqué.
Je me demandais s'il existe une manière de rendre cette tâche moins compliquée, que ce soit une extension ou fonction ?
Merci.
Hors ligne
#2 Tue 24 November 2020 20:12
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: pivot_table dynamique sur Postgre ?
Bonsoir,
l'extension tablefunc est votre amie.
Nicolas
Hors ligne