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

PostgreSQLの行から列へ

    まず、crosstab() 関数ファミリーは標準のPostgreSQLにはインストールされていません。拡張機能tablefuncをインストールする必要があります このため。 PostgreSQL 9.1では、次のようになります。

    CREATE EXTENSION tablefunc;
    

    古いバージョンについては、この関連する回答をご覧ください。

    クエリ

    クエリは次のようになります:

    SELECT *
    FROM   crosstab (
            'SELECT l.id
                   ,c.column_name
                   ,c.data
             FROM   custom_columns_table c
             JOIN   list_table l ON l.id = c.list_id
             ORDER  BY 1',
    
            'SELECT DISTINCT column_name
             FROM   custom_columns_table
             ORDER  BY 1')
    AS tbl (
        id integer
       ,email text
       ,name text
       );
    

    crosstab()の形式を使用します 2つのパラメーターを使用します。これは、属性が欠落している可能性があるためです。たとえば、人がメールを持っていないとき。次に、このフォームはNULLを返します emailの場合 桁。詳細な説明:

    • PostgreSQLクロス集計クエリ

    機能

    または、関数を作成して、呼び出しごとに列定義リストを指定する必要がないようにします。

    CREATE OR REPLACE FUNCTION f_mycross(text, text)
      RETURNS TABLE (
        id integer
       ,email text
       ,name text)
      AS '$libdir/tablefunc','crosstab_hash' LANGUAGE C STABLE STRICT;
    

    電話:

    SELECT * FROM f_mycross(
           'SELECT l.id
                  ,c.column_name
                  ,c.data
            FROM   custom_columns_table c
            JOIN   list_table l ON l.id = c.list_id
            ORDER  BY 1',
        
           'SELECT DISTINCT column_name
            FROM   custom_columns_table
            ORDER  BY 1')
    



    1. SUBSTRING()関数を使用してSQLServerの文字列から部分文字列を返す方法

    2. SQL結合の究極のガイド:外部結合–パート2

    3. SQLで数値をフロア化する方法

    4. PostgreSQL9.6beta1用のPGLogical1.1パッケージ