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

Tự động tạo các cột cho bảng chéo trong PostgreSQL

Bạn có thể sử dụng hàm C được cung cấp crosstab_hash cho điều này.

Hướng dẫn sử dụng không rõ ràng lắm về mặt này. Nó được đề cập ở cuối chương về crosstab() với hai tham số:

Bạn có thể tạo các hàm được xác định trước để tránh phải viết ra các tên và loại cột kết quả trong mỗi truy vấn. Xem các ví dụ trong phần trước. Hàm C cơ bản cho dạng crosstab này được đặt tên là crosstab_hash .

Ví dụ của bạn:

CREATE OR REPLACE FUNCTION f_cross_test_db(text, text)
  RETURNS TABLE (kernel_id int, key1 int, key2 int, key3 int)
  AS '$libdir/tablefunc','crosstab_hash' LANGUAGE C STABLE STRICT;

Gọi:

SELECT * FROM f_cross_test_db(
      'SELECT kernel_id, key, value FROM test_db ORDER BY 1,2'
     ,'SELECT DISTINCT key FROM test_db ORDER BY 1');

Lưu ý rằng bạn cần tạo một crosstab_hash riêng biệt chức năng cho mọi crosstab với một kiểu trả về khác.

Có liên quan:

  • PostgreSQL hàng thành cột

Chức năng tạo danh sách cột của bạn khá phức tạp, kết quả không chính xác (int thiếu sau kernel_id ), nó có thể được thay thế bằng truy vấn SQL này:

SELECT 'kernel_id int, '
       || string_agg(DISTINCT key::text, ' int, '  ORDER BY key::text)
       || ' int, DUMMY text'
FROM   test_db;

Và nó vẫn không thể được sử dụng động.



  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 justify_days () hoạt động trong PostgreSQL

  2. Làm cách nào để có được một kết xuất cơ sở dữ liệu postgres văn bản thuần túy trên heroku?

  3. SQL:Khi nói đến NOT IN và NOT EQUAL TO, cái nào hiệu quả hơn và tại sao?

  4. Cách chèn dữ liệu CSV vào cơ sở dữ liệu PostgreSQL (cơ sở dữ liệu từ xa)

  5. ComboBox.ValueMember và DisplayMember