Моя цель — взять данные из строки с определенным идентификатором и преобразовать их в объект JSON для вставки в другую таблицу. То, с чего я начинаю, выглядит так
Event_Details
-----------------------------------
ID | ID2 | First_Name| Last_Name |
-----------------------------------
1X | 2B | John | Smith |
2X | 2B | Adam | John |
3X | 2B | Sarah | Jones |
1X | 5C | Joe | Rob |
То, что я хочу, выглядит так:
[
{
"id2": "2B",
"event": {
"ID": "1X",
"First_Name": "John",
"Last_Name": "Smith"
}
},
{
"id2": "5C",
"event": {
"ID": "1X",
"First_Name": "Joe",
"Last_Name": "Rob"
}
}
]
Мне нужно сгруппировать элементы в один объект JSON по «ID», но я хочу, чтобы id2 находился вне массива «Event».
Это то, что у меня есть до сих пор, что делает первое, у меня просто проблемы с вложением запроса для массива внутри него:
select json_agg (b)
from (select ID2 as "ID2"
from event_details
)b


Я считаю, что это то, что вы ищете:
select json_agg(jsonb_build_object('id2', id2,
'event', jsonb_build_object('ID', id,
'First_Name', first_name,
'Last_Name', last_name
)))
from event_details group by id;