Прав сте, Redshift в момента не поддържа generate_series. Един от начините да заобиколите това е да генерирате своя собствена серийна таблица и да се присъедините към нея. В моя пример по-долу току-що направих row_number() срещу таблицата pg_attribute, за да генерирам последователността. Можете да коригирате стойността TOP (v), за да коригирате сега много числа, които искате във вашата последователност, ако имате нужда от повече от това, което pg_attribute може да ви даде, опитайте кръстосано свързване на pg_attribute със себе си. Не твърдя, че това е най-добрият начин за генериране на таблица с последователности, можете да я генерирате както искате; моята основна мисъл е, че ще ви е необходим такъв, който да замести generate_series.
След като имате таблицата със серията си, това е просто обединяване, за да получите вашия резултат. Пълен пример:
-- 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;