Trước tiên, hãy cài đặt tiện ích mở rộng tablefunc , nếu bạn chưa có. Cần thực hiện một lần cho mỗi cơ sở dữ liệu.
CREATE EXTENSION tablefunc;
Bạn cần PostgreSQL 9.1 cho CREATE EXTENSION
. Trong các phiên bản cũ hơn, bạn phải chạy tập lệnh cài đặt từ trình bao bằng lệnh như:
psql -d dbname -f SHAREDIR/contrib/tablefunc.sql
Thông tin thêm về Postgres 9.0 trong hướng dẫn tốt .
Sau đó, bạn có thể sử dụng một truy vấn như sau:
SELECT *
FROM crosstab (
'SELECT id
,label
,value
FROM t
ORDER BY 1, 2',
'SELECT DISTINCT label
FROM t
ORDER BY 1')
AS tbl (
id int
,lab1 text
,lab2 text
,lab3 text
,lab4 text
,lab5 text
,lab6 text
);
Trả về chính xác những gì bạn đã yêu cầu.
Bạn cũng có thể tạo một hàm cho điều đó. Tôi đã thêm thông tin khác trong câu trả lời có liên quan chặt chẽ
này .