crosstab()
を使用します 2つのパラメータを持つバリアント
:
SELECT * FROM crosstab(
'SELECT zone_id, group_id, area
FROM ct
ORDER BY 1,2'
,'SELECT g FROM generate_series(1,8) g' -- ! Provide values explicitly
)
AS ct(
row_name integer
, g_1 float8, g_2 float8
, g_3 float8, g_4 float8
, g_5 float8, g_6 float8
, g_7 float8, g_8 float8);
これにより、どの値がどの出力列に入るのかを明示的に宣言します。したがって、関数はNULL
を入力する場所を認識しています。 値。この場合、generate_series()
1〜8の数字で8行を提供するのに便利です。 VALUES
式は代替手段になります:
'VALUES (1), (2), (3), (4), (5), (6), (7), (8)'
また、ORDER BY
も忘れないでください 最初のパラメータクエリの句。