如何在postgres中简单地将两列转换成一行?

问题描述 投票:1回答:1

以下是我的查询的输出:

key                                ;value
"2BxtRdkRvwc-2hPjF8LBmHD-finapril" ;4
"3QXORSfsIY0-2sDizCyvY6m-finapril" ;12
"4QXORSfsIY0-2sDizCyvY6m-curr"     ;12
"5QXORSfsIY0-29Xcom4SHVh-finapril" ;12

我想要的只是将行放入列中,以便只有一行保留密钥作为列名。

我已经看到交叉表的例子适用于很复杂的用例,但我想知道在我的特定情况下是否有更简单的方法可以实现这一点?

任何帮助表示赞赏 谢谢

Postgres版本:9.5.10

postgresql
1个回答
1
投票

无法执行导致未知数量和列名称的查询。获得类似效果的最简单方法是生成一个json对象,客户端应用程序可以将其轻松解释为数据透视表,例如:

with the_data(key, value) as (
    values
    ('2BxtRdkRvwc-2hPjF8LBmHD-finapril', 4),
    ('3QXORSfsIY0-2sDizCyvY6m-finapril', 12),
    ('4QXORSfsIY0-2sDizCyvY6m-curr', 12),
    ('5QXORSfsIY0-29Xcom4SHVh-finapril', 12)
)

select jsonb_object_agg(key, value)
from the_data;

该查询返回此json对象:

{
    "4QXORSfsIY0-2sDizCyvY6m-curr": 12,
    "2BxtRdkRvwc-2hPjF8LBmHD-finapril": 4,
    "3QXORSfsIY0-2sDizCyvY6m-finapril": 12,
    "5QXORSfsIY0-29Xcom4SHVh-finapril": 12
}
© www.soinside.com 2019 - 2024. All rights reserved.