サブクエリからクロス集計クエリの列の名前の値を取得することは可能ですか?
CREATE TABLE mytable(employee_name text, month date, allocation double precision);
INSERT INTO mytable VALUES('A','2017-11-30','0.5');
INSERT INTO mytable VALUES('B','2017-11-30','0.8');
INSERT INTO mytable VALUES('B','2017-12-31','0.5');
SELECT * FROM crosstab
(
'SELECT employee_name , month , allocation FROM mytable ORDER BY 1',
'SELECT DISTINCT month FROM mytable ORDER BY 1'
)
AS
(
employee_name text
# Here a subquery to get column names
# automatically eg : 'SELECT DISTINCT month FROM mytable'
);
解決策を見つけました。これは、これまでに見つかった最良のソリューションです。
いいえ、結果セットのスキーマをテーブル内の値に依存させることはできません。ただし、動的SQLを使用してクエリを生成できます。
SELECT FORMAT($$
SELECT * FROM crosstab
(
'SELECT employee_name , month , allocation FROM mytable ORDER BY 1',
'SELECT DISTINCT month FROM mytable ORDER BY 1'
)
AS
(
employee_name text,
%s
)
$$,
'something here...'
);
今、あなたはそれを記入したいだけです'something here..'
SELECT FORMAT(
$$
SELECT * FROM crosstab
(
'SELECT employee_name , month , allocation
FROM mytable
ORDER BY 1, 2',
'SELECT DISTINCT month FROM mytable ORDER BY 1'
)
AS
(
employee_name text,
%s
)
$$,
string_agg(
FORMAT('%I %s', month, 'double precision'), ', '
ORDER BY month
)
)
FROM (
SELECT DISTINCT month
FROM mytable
)
AS t;
次に、生成するクエリを実行してください。
employee_name | 2017-11-30 | 2017-12-31
---------------+------------+------------
A | 0.5 |
B | 0.8 | 0.5
(2 rows)