私は、Postgresのtablefunc
拡張機能のCROSSTAB
機能を使用して、一部のデータに対してピボット操作を実行しようとしています。データはいくつかの変換を最初に受けなければなりません。共通テーブル式で実行します。Postgresクロス集計クエリで共通テーブル式を使用できません
ただし、CROSSTAB
はこれらの式の結果を見ることはできません。例えば
、この正常に動作します一時テーブルからクエリソーシングデータ:
CREATE TEMPORARY TABLE
temporary_table
(name, category, category_value)
ON COMMIT DROP
AS (
VALUES
('A', 'foo', 1 ),
('A', 'bar', 2 ),
('B', 'foo', 3 ),
('B', 'bar', 4 )
);
SELECT * FROM
CROSSTAB(
'SELECT * FROM temporary_table',
$$
VALUES
('foo'),
('bar')
$$
) AS (
name TEXT,
foo INT,
bar INT
);
と、予想通り、次の出力を生成します。
name | foo | bar
text | integer | integer
---- | ------- | -------
A | 1 | 2
B | 3 | 4
しかし、同じクエリ、このの共通テーブル式を使用して実行されません。
WITH
common_table
(name, category, category_value)
AS (
VALUES
('A', 'foo', 1 ),
('A', 'bar', 2 ),
('B', 'foo', 3 ),
('B', 'bar', 4 )
)
SELECT * FROM
CROSSTAB(
'SELECT * FROM common_table',
$$
VALUES
('foo'),
('bar')
$$
) AS (
name TEXT,
foo INT,
bar INT
)
と、次のエラー生成:
ERROR: relation "common_table" does not exist
LINE 1: SELECT * FROM common_table
^
QUERY: SELECT * FROM common_table
********** Error **********
ERROR: relation "common_table" does not exist
SQL state: 42P01
を、私はそれを取るこれは、テキストクエリ(SELECT * FROM common_table
)が異なるコンテキストのいくつかの並べ替えに走る意味?
注:tablefunc
拡張機能が利用可能であることをCROSSTAB
のために有効にする必要があります。
CREATE EXTENSION IF NOT EXISTS tablefunc;