使用Postgres将2个表中的数据作为数组输出

时间:2019-05-04 15:20:27

标签: postgresql

我在Postgres DB中有2个表,并且需要一些帮助,以便尽可能地以特定格式输出数据。

表1(帐户)

RowID    Name    AccountNo
1        John    45356333
2        Helen   74562445

表2(代码)

RowID     AccountNo    Code         Status
1         45356333     csdcwew      Active
2         45356333     gererge      Active
2         74562445     thwfewf      Active

我希望能够获取数据,以便最终获得如下所示的JSON对象:

{
  "Accounts": [
    {
      "AccountNo": "45356333",
      "Codes": [
        {
          "Code": "csdcwew",
          "Status": "Active"
        },
        {
          "Code": "gererge",
          "Status": "Active"
        }
      ]
    },
    {
      "AccountNo": "74562445",
      "Codes": [
        {
          "Code": "thwfewf",
          "Status": "Active"
        }
      ]
    }
  ]
}

我进行了一个查询,该查询使用array_agg函数输出所有帐户和代码数组,但这是我所能做到的。真的,我也需要状态和描述。

 SELECT a."Name",
    array_agg(c."Codes")
   FROM ("Accounts" a
     LEFT JOIN "Codes" c ON ((c."AccountNo" = a."AccountNo")))
  GROUP BY a."Name";

1 个答案:

答案 0 :(得分:1)

您非常接近。您可以按照汇总代码的方式继续进行汇总状态值的方式。然后您将有两列可以按顺序进行迭代。

另一种选择是Postgres具有相当合理的JSON语法,使您可以直接聚合到JSON。

SELECT json_agg(json_build_object(
    'AccountNo', accountNo,
    'Codes', val ))
FROM (
    select accountNo,
        json_agg (json_build_object(
            'code', code, 
            'status', status))  as val 
        from codes
        group by accountNo) as c;