J'ai des données telles que les suivantes:Postgresql crosstab valeur pivot existe dans la colonne pour le nom de la ligne
create temp table codes (id integer, code text);
insert into codes (id, code) values
(1, 'code_1'),
(1, 'code_2'),
(2, 'code_2'),
(3, 'code_1');
Afin de faciliter une sélection qui rejoint sur le champ id, je voudrais faire pivoter ce tableau à l'aide du tableau croisé , de sorte que chaque valeur d'identifiant est unique. Jusqu'à présent, j'ai cette conception, qui travaille pour une valeur de code unique:
select *
from crosstab($$
select id, code, case when code = 'code_1' then true else false end
from codes
order by 1,2
$$) as codes(id int, is_code_1 boolean);
sortie correcte:
id | is_code_1
----+-----------
1 | t
2 | f
3 | t
(3 rows)
Je voudrais pouvoir l'étendre aux valeurs de code multiples pour que je finis avec sortie comme ceci:
id | is_code_1 | is_code_2
----+-----------+-----------
1 | t | t
2 | f | t
3 | t | f
Pas sûr que ce soit possible, mais serait très heureux d'apprendre autrement.
Modifier: Cela me permet d'être très proche du résultat souhaité, peut fournir comme une réponse, car je peux l'utiliser pour résoudre le problème. Merci @Daniel Vérité pour le lien vers un tableau croisé de 2 paramètres.
select *
from crosstab(
$$
select id, code, case when code is not null then true else false end
from codes
order by 1,2
$$,
$$values ('code_1'), ('code_2')$$
) as codes(id int, code_1 boolean, code_2 boolean);
Produit:
id | code_1 | code_2
----+--------+--------
1 | t | t
2 | | t
3 | t |
donc au lieu de valeurs nulls faux booléennes, mais je peux travailler avec ça.
Essayez avec 2 paramètres crosstab, comme expliqué dans https://stackoverflow.com/questions/3002499/postgresql- crosstab-query –
@ DanielVérité Merci pour le lien, ça m'a fait 99% du chemin. – sage88