gpt4 book ai didi

postgresql - 作为列的 Postgres 值

转载 作者:行者123 更新时间:2023-11-29 13:59:47 24 4
gpt4 key购买 nike

我正在使用 PostgreSQL 9.3,我有这个:

PARENT_TABLE

ID | NAME
1 | N_A
2 | N_B
3 | N_C

CHILD_TABLE

ID | PARENT_TABLE_ID | KEY | VALUE
1 | 1 | K_A | V_A
2 | 1 | K_B | V_B
3 | 1 | K_C | V_C
5 | 2 | K_A | V_D
6 | 2 | K_C | V_E
7 | 3 | K_A | V_F
8 | 3 | K_B | V_G
9 | 3 | K_C | V_H

请注意,我可能会在 KEY 中添加 K_D,它是完全动态的。

我想要的是返回以下内容的查询:

QUERY_TABLE

ID | NAME | K_A | K_B | K_C | others K_...
1 | N_A | V_A | V_B | V_C | ...
2 | N_B | V_D | | V_E | ...
3 | N_C | V_F | V_G | V_H | ...

这可能吗?如果是,怎么办?

最佳答案

由于可能缺少值,您需要 crosstab() 的“安全”形式将列名作为第二个参数:

SELECT * FROM crosstab(
'SELECT p.id, p.name, c.key, c."value"
FROM parent_table p
LEFT JOIN child_table c ON c.parent_table_id = p.id
ORDER BY 1'

,$$VALUES ('K_A'::text), ('K_B'), ('K_C')$$)
AS t (id int, name text, k_a text, k_b text, k_c text; -- use actual data types

此相关答案中的详细信息:
PostgreSQL Crosstab Query

关于添加“额外”列:
Pivot on Multiple Columns using Tablefunc

关于postgresql - 作为列的 Postgres 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22961156/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com