आप सही कह रहे हैं, Redshift वर्तमान में Generate_series का समर्थन नहीं करता है। इससे बचने का एक तरीका यह है कि आप अपनी खुद की सीरीज टेबल बनाएं और उसमें शामिल हों। नीचे दिए गए मेरे उदाहरण में मैंने अनुक्रम उत्पन्न करने के लिए pg_attribute तालिका के विरुद्ध अभी row_number() किया है। आप अपने क्रम में अब कई संख्याओं को समायोजित करने के लिए 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;