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

PostgreSQL hàng thành cột

Trước hết, crosstab() họ hàm không được cài đặt trong PostgreSQL tiêu chuẩn. Bạn cần cài đặt tiện ích mở rộng tablefunc cho điều này. Trong PostgreSQL 9.1, bạn chỉ cần:

CREATE EXTENSION tablefunc;

Đối với các phiên bản cũ hơn, hãy xem câu trả lời liên quan này.

Truy vấn

Truy vấn có thể trông như thế này:

SELECT *
FROM   crosstab (
        'SELECT l.id
               ,c.column_name
               ,c.data
         FROM   custom_columns_table c
         JOIN   list_table l ON l.id = c.list_id
         ORDER  BY 1',

        'SELECT DISTINCT column_name
         FROM   custom_columns_table
         ORDER  BY 1')
AS tbl (
    id integer
   ,email text
   ,name text
   );

Tôi sử dụng dạng crosstab() với hai tham số, vì điều đó cho phép thiếu các thuộc tính. Giống như, khi một người không có email. Sau đó, biểu mẫu này sẽ trả về NULL cho email cột. Giải thích chi tiết:

  • Truy vấn bảng chéo PostgreSQL

Chức năng

Hoặc tạo một hàm để bạn không phải cung cấp danh sách định nghĩa cột cho mọi lệnh gọi:

CREATE OR REPLACE FUNCTION f_mycross(text, text)
  RETURNS TABLE (
    id integer
   ,email text
   ,name text)
  AS '$libdir/tablefunc','crosstab_hash' LANGUAGE C STABLE STRICT;

Gọi:

SELECT * FROM f_mycross(
       'SELECT l.id
              ,c.column_name
              ,c.data
        FROM   custom_columns_table c
        JOIN   list_table l ON l.id = c.list_id
        ORDER  BY 1',
    
       'SELECT DISTINCT column_name
        FROM   custom_columns_table
        ORDER  BY 1')



  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 có hỗ trợ các cụm từ không nhạy cảm trọng âm không?

  2. pghoard Alternatives - Quản lý sao lưu PostgreSQL với ClusterControl

  3. Cài đặt PostgreSQL 9 trên Windows:Không thể ghi bên trong đường dẫn môi trường TEMP.

  4. Cơ sở dữ liệu mặc định có tên là postgres trên máy chủ Postgresql

  5. Thứ tự của các bảng trong một phép nối có quan trọng không khi các phép nối LEFT (bên ngoài) được sử dụng?