sql >> Databasteknik >  >> RDS >> PostgreSQL

dela rader i rödförskjutning

Du har rätt, Redshift stöder för närvarande inte gener_series. Ett sätt att komma runt detta är att skapa din egen serietabell och gå med i den. I mitt exempel nedan gjorde jag bara en row_number() mot tabellen pg_attribute för att generera sekvensen. Du kan justera TOP (v) värde för att justera nu många siffror du vill ha i din sekvens, om du behöver mer än vad pg_attribute kan ge dig, försök att korsfoga pg_attribute med sig själv. Jag hävdar inte att detta är det bästa sättet att generera en sekvenstabell, du kan generera den hur du vill; min huvudsakliga poäng är att du behöver en för att ersätta generera_serier.

När du väl har din serietabell är det en enkel sammanfogning för att få ditt resultat. Komplett exempel:

-- 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. Skapa anpassad inloggningsskärm i Oracle Forms 10g

  2. Hur man kontrollerar i MySQL om något datum i ett datumintervall faller mellan datum som hålls i en tabell

  3. SQLSTATE[42000]:Syntaxfel eller åtkomstöverträdelse:1064 Du har ett fel i din SQL-syntax — PHP — PDO

  4. ColdFusion:Flera SQL-satser i en fråga?