sql >> Database >  >> RDS >> PostgreSQL

rijen splitsen in Redshift

Je hebt gelijk, Redshift ondersteunt momenteel geen generation_series. Een manier om dit te omzeilen is door uw eigen serietabel te genereren en daaraan mee te doen. In mijn voorbeeld hieronder heb ik zojuist een row_number() tegen de pg_attribute-tabel gedaan om de reeks te genereren. U kunt de TOP (v)-waarde aanpassen om nu veel getallen in uw reeks aan te passen. Als u meer nodig heeft dan wat pg_attribute u kan geven, probeer dan pg_attribute met zichzelf te verbinden. Ik beweer niet dat dit de beste manier is om een ​​sequentietabel te genereren, je kunt het op elke gewenste manier genereren; mijn belangrijkste punt is dat je er een nodig hebt om gene_series te vervangen.

Zodra u uw reekstabel hebt, is het een simpele join om uw resultaat te krijgen. Compleet voorbeeld:

-- 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. Verander de tafel zonder de hele tafel te vergrendelen

  2. Dubbel aanhalingsteken in de naam van de tabel in de selectiequery van PostgreSQL

  3. hoe json-array als tabel uit mysql-tekstkolom te extraheren wanneer het aantal json-objecten in de array onbekend is?

  4. Nummer converteren naar datum in orakel