PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Chuyển đổi một kết quả sql để một cột chuyển sang nhiều cột

Hãy xem xét bản trình diễn sau:

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

Kết quả:

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

user là một từ dành riêng. Đừng sử dụng nó làm tên cột! Tôi đã đổi tên nó thành usr .

Bạn cần cài đặt thêm chức năng bảng mô-đun cung cấp hàm crosstab() . Lưu ý rằng thao tác này hoàn toàn đúng trên mỗi cơ sở dữ liệu .In PostgreSQL 9.1 bạn có thể chỉ cần:

CREATE EXTENSION tablefunc;

Đối với phiên bản cũ hơn, bạn sẽ thực thi một shell-script được cung cấp trong contrib của bạn danh mục. Trong Debian, cho PostgreSQL 8.4 , đó sẽ là:

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. Cách thêm số ngày làm việc vào ngày nhất định

  2. Postgres lỗi cú pháp bảng thả

  3. Nâng cấp tự động gần như bằng không thời gian ngừng hoạt động của các cụm PostgreSQL trong đám mây (Phần II)

  4. PostgreSQL 13:Đừng để các vị trí giết chết vị trí chính của bạn

  5. Thay vì LIKE và ~, tại sao chỉ SIMILAR TO hoạt động khi thực hiện kết hợp regex với các lựa chọn thay thế