我在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";
答案 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;