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;