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

tách các hàng trong Redshift

Bạn nói đúng, Redshift hiện không hỗ trợ create_series. Một cách để giải quyết vấn đề này là tạo bảng chuỗi của riêng bạn và tham gia vào bảng đó. Trong ví dụ của tôi dưới đây, tôi vừa tạo một row_number () đối với bảng pg_attribute để tạo chuỗi. Bạn có thể điều chỉnh giá trị TOP (v) để điều chỉnh ngay bây giờ nhiều số bạn muốn trong chuỗi của mình, nếu bạn cần nhiều hơn những gì pg_attribute có thể cung cấp cho bạn, hãy thử kết hợp chéo pg_attribute với chính nó. Tôi không khẳng định đây là cách tốt nhất để tạo bảng tuần tự, bạn có thể tạo bảng theo bất kỳ cách nào bạn muốn; điểm chính của tôi là bạn sẽ cần một cái để thay thế cho create_series.

Sau khi bạn có bảng chuỗi của mình, sau đó nó là một phép nối đơn giản để nhận được kết quả của bạn.

-- Setup Example
CREATE TABLE test
(
    col1 char(2),
    col2 char(2),
    col3 char(2),
    col4 integer
);

INSERT INTO test(col1, col2, col3, col4)
VALUES 
    ('A1', 'A2', 'A3', 4),
    ('B1', 'B2', 'B3', 3),
    ('C1', 'C2', 'C3', 1);


-- Generate 10 sequence numbers to table.  Adjust as needed or roll your own
SELECT TOP 10 ROW_NUMBER() OVER (PARTITION BY attnum ORDER BY attnum) n
INTO sequence
FROM pg_catalog.pg_attribute;

-- Example Query
SELECT col1, col2, col3, s.n
FROM test t
     INNER JOIN sequence s ON s.n <= t.col4
ORDER BY col1, col2, col3, s.n;

-- Clean up
DROP TABLE sequence;
DROP TABLE test;



  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:ràng buộc duy nhất hoặc chỉ mục duy nhất

  2. Lỗi khi chạy lệnh psql trong /docker-entrypoint-initdb.d/db_init.sh (psql:không thể kết nối với máy chủ:Kết nối bị từ chối)

  3. Đếm số hàng sau khi nối ba bảng trong PostgreSQL

  4. Vấn đề ngủ đông:phải xuất hiện trong mệnh đề GROUP BY hoặc được sử dụng trong một hàm tổng hợp

  5. Tạo mảng cho các giá trị từ danh sách các cột được trích xuất trong Postgres