まず、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')