PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Транспониране на sql резултат, така че една колона да отива в няколко колони

Помислете за следната демонстрация:

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

Резултат:

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

user е запазена дума. Не го използвайте като име на колона! Преименувах го на usr .

Трябва да инсталирате допълнителния модул tablefunc, който предоставя функцията crosstab() . Имайте предвид, че тази операция е строго за база данни .В PostgreSQL 9.1 можете просто:

CREATE EXTENSION tablefunc;

За по-стара версия бихте изпълнили shell-скрипт, предоставен във вашия contrib директория. В Debian, за PostgreSQL 8.4 , това би било:

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. Искам да извличам данни от различно име на таблица с помощта на функцията postgresql

  2. Разлика в производителността:условието е поставено в клауза INNER JOIN спрямо WHERE

  3. Грешка в сокета Postgresql на OSX 10.7.3 при стартиране на syncdb на Django

  4. Получаване на име на текущата функция вътре във функцията с plpgsql

  5. Конвертирайте PostgreSQL масив в PHP масив