これに基づいて、PostgreSQL クエリ結果の列名となる値を持つテーブルがあります。
id col1 col2
----------------------
0 name ax
0 name2 bx
0 name3 cx
1 name dx
1 name2 ex
1 name2 fx
... ... ...
今、クエリの結果を次のようにしたい
id name name2 name3 ...
0 ax bx cx ...
1 dx ex fx ...
col1 のフィールド数は、新しいフィールドが追加されるたびに変更されます。そのためには、動的な方法で結果を返す関数を生成する必要があります。
これはそれをしました:
SELECT
id,
/* if col1 matches the name string of this CASE, return col2, otherwise return NULL */
/* Then, the outer MAX() aggregate will eliminate all NULLs and collapse it down to one row per id */
MAX(CASE WHEN (col1 = 'name') THEN col2 ELSE NULL END) AS name,
MAX(CASE WHEN (col1 = 'name2') THEN col2 ELSE NULL END) AS name2,
MAX(CASE WHEN (col1 = 'name3') THEN col2 ELSE NULL END) AS name3
FROM mytable
GROUP BY id
ただし、col1 の名前は大きなリストになる可能性があるため、動的にする必要があるため、col1 に新しい名前が追加されるたびにクエリを更新することはできません。
ピボットテーブルを使用してそれを行う方法を確認しました。この例に従おうとしまし たが、フィールドもよく知られています。誰か助けてください。