基于此,我有一个表,其中的值将是 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 中添加新名称时我都无法更新查询。
我使用数据透视表检查了如何做到这一点,我尝试按照这个示例进行操作 ,但这些字段也是众所周知的,请有人帮助我吗?