【问题标题】:Convert table into json format将表格转成json格式
【发布时间】:2021-07-02 14:02:13
【问题描述】:

我是 Postgres 的新学生。我想将表格转换为 json 格式。有人可以告诉我怎么做吗?比如说,我有一个有 4 列的表格:

ticker   fin_item   year     amount
aapl     cash       fy2019   100
appl     cash       fy2020   150
apple    debt       fy2019   200
apple    debt       fy2020   250

我想将这些数据插入到一个新表中,使用行 fin_item 作为新键:

create table t_newtable(
    ticker varchar(10)
    cash jsonb
    debt jsonb
);

如何将其转换成这种 json 格式:

{"ticker":"aapl","cash":{"fy2019":100","fy2020":150"}
,{"ticker":"aapl","debt":{"fy2019":200","fy2020":250"}

非常感谢您的帮助!

【问题讨论】:

    标签: postgresql jsonb


    【解决方案1】:

    据我了解,您需要一个带有条件的插入语句以及 JSONB...OBJECT 类型函数,以便为每个 tickerfin_item 值组插入 JSONB 值,例如

    INSERT INTO t_newtable
    SELECT ticker,
           CASE WHEN fin_item = 'cash' THEN
                JSONB_BUILD_OBJECT('ticker', ticker, fin_item,JSONB_OBJECT_AGG(year, amount)) 
            END,
           CASE WHEN fin_item = 'debt' THEN
                JSONB_BUILD_OBJECT('ticker', ticker, fin_item,JSONB_OBJECT_AGG(year, amount)) 
            END
      FROM t
     GROUP BY ticker, fin_item
    

    Demo

    【讨论】:

    • 非常感谢您抽出宝贵时间提供帮助!
    • 我是否可以以某种方式更改查询,以便它们插入只有 2 列ticker 和 fin_item 的 t_newtable。在ticker 列下,将有'apple' 行,在fin_item 下将有json 对象行: {"cash": {"fy2015": 100.0, "fy2016": 110.0, "fy2017": 120.0, "fy2018 “:130.0,“2019财年”:140.0,“2020财年”:150.0}},{“债务”:{“2015财年”:200.0,“2016财年”:210.0,“2017财年”:220.0,“2018财年”:230.0,“2019财年” ": 240.0, "fy2020": 250.0}} ,{"acc_rec": {"fy2015": 600.0, "fy2016": 610.0, "fy2017": 620.0, "fy2018": 630.0, "fy2019": 640.0, "fy2020 ": 650.0}}
    • 我想我明白了。再次感谢您的帮助,Ozhan 先生!我使用这个查询: INSERT INTO t_newtable SELECT ticker, JSONB_BUILD_OBJECT(item, JSONB_OBJECT_AGG(year, amount)) FROM t_items GROUP BY t_items.ticker, t_items.item;
    • 不客气@TimB,祝你学习愉快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 2016-05-01
    • 2019-08-05
    • 1970-01-01
    • 2021-10-15
    • 2013-11-07
    • 2019-12-16
    相关资源
    最近更新 更多