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

Tự động tạo các cột trong PostgreSQL

Truy vấn bảng chéo cơ bản cho ví dụ của bạn rất đơn giản:

SELECT * FROM crosstab(
       'SELECT zoom, day, point
        FROM   province
        ORDER  BY 1, 2'

     , $$VALUES ('2015-10-01'::date), ('2015-10-02')$$)
AS ct (zoom text, day1 int, day2 int);

Nhưng không với tên cột động hoặc số lượng cột động. Như một sự thỏa hiệp, bạn có thể có một số lượng cột cố định và chỉ điền vào những cột đứng đầu. Khái niệm cơ bản:

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

Động?

crosstab_hash sẽ không giúp bạn với tên cột động. Nó để sử dụng nhiều lần mà không cần nhập danh sách định nghĩa cột, nhưng không dùng cho động tên các cột. Ví dụ:

  • Tự động tạo các cột cho bảng chéo trong PostgreSQL
  • Sql:Chuyển các hàng thành cột

Đối với tên cột thực sự động, bạn cần có hai các chuyến đi vòng quanh máy chủ. Cho dù bạn truy xuất tên cột bằng truy vấn đầu tiên để tạo truy vấn thứ hai, hay bạn tạo con trỏ hoặc bảng tạm thời hoặc một câu lệnh đã chuẩn bị. Dù bạn cố gắng, bạn cần hai chuyến đi khứ hồi. SQL muốn biết kiểu trả về tại thời điểm gọi.

Cách gần nhất mà tôi có thể nhận được lệnh gọi "động" là với crosstab_n() tùy chỉnh của tôi chức năng được xác định trong câu trả lời liên quan này:

  • Thay thế động cho trục xoay với CASE và GROUP BY

Hoặc bạn từ bỏ ý định truy vấn bảng chéo động hoàn toàn (bởi vì bạn biết đấy, điều đó là không thể) và sử dụng quy trình làm việc hai bước, như đã đề cập ở trên.

  1. Để một hàm tạo văn bản truy vấn bảng chéo. Bạn có thể sử dụng chức năng được cung cấp tại đây (và điều chỉnh nó theo nhu cầu của bạn!):

    • Thực thi một truy vấn bảng chéo động

    Đặc biệt, hãy xóa GROUP BY 1, 2 , vì bạn không tổng hợp các hàng trước khi lập bảng chéo.

  2. Thực thi chức năng đã tạo.

Để hoàn thiện, còn có \crosstabview mới metacommand trong psql trong Postgres 9.6 (vừa được phát hành) - với chức năng tương tự và nó có thể hiển thị tên cột động (việc đính kèm tên động xảy ra trong máy khách psql, không phải trong máy chủ Postgres).




  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:Truy vấn không có đích cho dữ liệu kết quả

  2. Làm cách nào tôi có thể kiểm tra xem một cột tồn tại trong bảng bằng câu lệnh SQL

  3. Lấy tên tháng từ một ngày trong PostgreSQL

  4. Hàm thực thi nhanh hơn mà không có công cụ sửa đổi NGHIÊM TÚC?

  5. Nhận id chèn cuối cùng sau khi chèn đã chuẩn bị sẵn với PDO