Masz rację, Redshift obecnie nie obsługuje generate_series. Jednym ze sposobów na obejście tego jest wygenerowanie własnej tabeli serii i dołączenie do niej. W moim przykładzie poniżej właśnie wykonałem row_number() względem tabeli pg_attribute, aby wygenerować sekwencję. Możesz dostosować wartość TOP (v), aby dostosować teraz wiele liczb, które chcesz w swojej sekwencji, jeśli potrzebujesz więcej niż to, co może ci dać pg_attribute, spróbuj połączyć pg_attribute z samym sobą. Nie twierdzę, że jest to najlepszy sposób na wygenerowanie tabeli sekwencji, możesz wygenerować ją w dowolny sposób; moim głównym celem jest to, że będziesz potrzebować jednego, aby zastąpić generator_series.
Gdy masz już tabelę serii, możesz wykonać proste sprzężenie, aby uzyskać wynik.Pełny przykład:
-- 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;