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

时间:2017-12-19 12:31:27

标签: postgresql

以下是我的查询的输出:

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

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

我已经看过使用交叉表的示例,可以处理复杂的用例,但我想知道在我的特定情况下是否有更简单的方法可以实现这一点?

任何帮助表示赞赏 感谢

Postgres版本:9.5.10

1 个答案:

答案 0 :(得分: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
}