PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Mentranspos hasil sql sehingga satu kolom masuk ke beberapa kolom

Pertimbangkan demo berikut:

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

Hasil:

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

user adalah kata yang dicadangkan. Jangan gunakan itu sebagai nama kolom! Saya menamainya menjadi usr .

Anda perlu menginstal tablefunc modul tambahan yang menyediakan fungsi crosstab() . Perhatikan bahwa operasi ini hanya per database .Dalam PostgreSQL 9.1 Anda cukup:

CREATE EXTENSION tablefunc;

Untuk versi yang lebih lama, Anda akan menjalankan skrip shell yang disediakan di contrib . Anda direktori. Di Debian, untuk PostgreSQL 8.4 , yaitu:

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. Apakah SELECT atau INSERT dalam suatu fungsi rentan terhadap kondisi balapan?

  2. Buka kueri SEPERTI postgresql

  3. Masukkan, pada pembaruan duplikat di PostgreSQL?

  4. Kesalahan PostgreSQL 'Tidak dapat terhubung ke server:Tidak ada file atau direktori seperti itu'

  5. Driver HikariCP Postgresql Mengklaim tidak menerima URL JDBC