sql >> データベース >  >> RDS >> PostgreSQL

Redshiftで行を分割する

    正解です。現在、Redshiftはgenerate_seriesをサポートしていません。これを回避する1つの方法は、独自のシリーズテーブルを生成し、それに結合することです。以下の例では、pg_attributeテーブルに対してrow_number()を実行して、シーケンスを生成しました。 TOP(v)値を調整して、シーケンス内で必要な数を調整できます。pg_attributeで得られる以上の数値が必要な場合は、pg_attributeとそれ自体を相互結合してみてください。これがシーケンステーブルを生成するための最良の方法であるとは言いません。好きな方法で生成できます。私の主なポイントは、generate_seriesの代わりに1つ必要になるということです。

    シリーズテーブルを作成したら、簡単に結合して結果を取得します。完全な例:

    -- 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. すべての便利な11gダイナミックパフォーマンスビュー

    2. mysqliプリペアドステートメントに複数の行を挿入します

    3. AWS RDSの問題を解決する方法:psycopg2.OperationalError:致命的:ユーザーrootのパスワード認証に失敗しました

    4. SQL文字列に「if句」を入れるにはどうすればよいですか?