Nejprve nainstalujte rozšíření tablefunc , pokud jste to ještě neudělali. Pro každou databázi je potřeba provést jednou.
CREATE EXTENSION tablefunc;
Potřebujete PostgreSQL 9.1 pro CREATE EXTENSION
. Ve starších verzích musíte spustit instalační skript z prostředí příkazem jako:
psql -d dbname -f SHAREDIR/contrib/tablefunc.sql
Další informace o Postgres 9.0 v podrobné příručce .
Pak můžete použít dotaz, jako je tento:
SELECT *
FROM crosstab (
'SELECT id
,label
,value
FROM t
ORDER BY 1, 2',
'SELECT DISTINCT label
FROM t
ORDER BY 1')
AS tbl (
id int
,lab1 text
,lab2 text
,lab3 text
,lab4 text
,lab5 text
,lab6 text
);
Vrátí přesně to, co jste požadovali.
Můžete pro to také vytvořit funkci. Přidal jsem další informace v této úzce související odpovědi
.