sql >> Databáze >  >> RDS >> PostgreSQL

Transponování výsledku sql tak, aby jeden sloupec přešel do více sloupců

Zvažte následující ukázku:

CREATE TEMP TABLE qa (id int, usr int, question_id int, answer_id int);
INSERT INTO qa VALUES
 (1,1,1,1)
,(2,1,2,9)
,(3,1,3,15)
,(4,2,1,2)
,(5,2,2,12)
,(6,2,3,20);

SELECT *
FROM   crosstab('
    SELECT usr::text
          ,question_id
          ,answer_id
    FROM qa
    ORDER BY 1,2')
 AS ct (
     usr text
    ,q1 int
    ,q2 int
    ,q3 int);

Výsledek:

 usr | q1 | q2 | q3
-----+----+----+----
 1   |  1 |  9 | 15
 2   |  2 | 12 | 20
(2 rows)

user je vyhrazené slovo. Nepoužívejte jej jako název sloupce! Přejmenoval jsem to na usr .

Musíte nainstalovat další modul tablefunc, který poskytuje funkci crosstab() . Všimněte si, že tato operace je striktně pro databázi .V PostgreSQL 9.1 můžete jednoduše:

CREATE EXTENSION tablefunc;

Pro starší verzi byste spustili shell-script dodaný ve vašem contrib adresář. V Debianu pro PostgreSQL 8.4 , to by bylo:

psql mydb -f /usr/share/postgresql/8.4/contrib/tablefunc.sql


  1. Úvod do fulltextového vyhledávání v MariaDB

  2. MariaDB JSON_DEPTH() Vysvětleno

  3. Jak mohu vypsat všechny cizí klíče odkazující na danou tabulku na serveru SQL?

  4. org.hibernate.internal.util.config.ConfigurationException:Nelze najít zdroj cfg.xml [/HibernateTest/src/hibernate.cfg.xml]