PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

dzielenie rzędów w Redshift

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;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Podczas wywoływania DB::select dlaczego otrzymuję komunikat Połączenie zostało zresetowane?

  2. Generuj serie miesięcy dla każdego wiersza w Oracle

  3. Migracja bazy danych SQL Server 2008 do Postgres

  4. Dlaczego liczba adnotacji w Django (1.6) jest tak wolna?

  5. Konwertuj znak Unicode ze znakami unikodowymi z powrotem na rzeczywisty znak w PostgreSQL