PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Transpozycja wyniku sql, tak aby jedna kolumna przechodziła do wielu kolumn

Rozważ następującą prezentację:

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);

Wynik:

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

user to słowo zastrzeżone. Nie używaj go jako nazwy kolumny! Zmieniłem jego nazwę na usr .

Musisz zainstalować dodatkowy moduł tablefunc, który udostępnia funkcję crosstab() . Pamiętaj, że ta operacja jest ściśle na bazę danych .W PostgreSQL 9.1 możesz po prostu:

CREATE EXTENSION tablefunc;

Dla starszej wersji wykonałbyś skrypt powłoki dostarczony w twoim contrib informator. W Debianie dla PostgreSQL 8.4 , czyli:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Problemy z połączeniem z SQLAlchemy i wieloma procesami

  2. [Wideo] Moc indeksowania w PostgreSQL

  3. Ulepszenie funkcji, którą UPSERTs opiera na tablicy wejściowej

  4. Jak sprawdzić, która wersja Postgresa jest uruchomiona?

  5. Jak działa funkcja Exp() w PostgreSQL