2016-10-27 1 views
0

voici l'exemple:convertir valeur de la cellule à la colonne respective dans PostgreSQL

select * from tmp 

--output 
A  B  Value 
--------------------- 
a  x  1 
b  x  2 
a  y  3 
b  y  4 
c  y  5 

Après une commande SQL regroupement sur la colonne B, je voudrais faire chaque valeur de la colonne A à une colonne séparée comme illustré ci-dessous :

B  a  b  c 
---------------------------- 
x  1  2  null 
y  3  4  5 

Y at-il une terminologie spécifique pour cette transformation? Merci!

+0

Quel est le résultat attendu si quelqu'un insère soudainement (e, v, 6)? – jarlh

+0

Ensuite, il devrait avoir une autre colonne nommée v, dont la valeur est nulle pour tout x et y, sauf que pour v c'est 6. @jarlh – KAs

Répondre

0

Vous devez trouver le maximum d'une autre valeur et la grouper avec la colonne d'ancrage (b dans votre cas). Veuillez noter que votre nombre de colonnes doit être similaire au nombre de valeurs attendues dans le champ A.

select b, 
max(case when A='a' then Value else null end)a, 
max(case when A='b' then Value else null end)b, 
max(case when A='c' then Value else null end)c 
from tmp 
group by 1 
+0

et si la valeur de la colonne A est indéfinie? Existe-t-il un moyen de faire cela sans parcourir la valeur de A manuellement? – KAs

+0

Vous pouvez utiliser la fonction de tabulation croisée pour cela; http://stackoverflow.com/questions/23060256/postgres-transpose-rows-to-columns –