【发布时间】:2018-05-12 21:40:17
【问题描述】:
我有两个表progress_report 和progress_report_activity。
CREATE TABLE PROGRESS_REPORT
(
REPORT_ID VARCHAR NOT NULL,
PCP_PATIENT_ID VARCHAR NOT NULL,
VC_PRODUCT_ID VARCHAR ,
REPORT_DURATION_DAYS INTEGER NOT NULL,
REPORT_GENERATION_DATE BIGINT,
IS_REPORT_READ BOOLEAN ,
ACTIVITY_DETAILS JSONB,
SYMPTOMS_DETAILS JSONB,
PRIMARY KEY (REPORT_ID)
);
CREATE TABLE PROGRESS_REPORT_ACTIVITY
(
REPORT_ACTIVITY_ID VARCHAR NOT NULL,
REPORT_ID VARCHAR NOT NULL,
ACTIVITY_CONFIG_ID VARCHAR NOT NULL,
ACTIVITY_ASSISTANCE VARCHAR NOT NULL,
PRIMARY KEY (REPORT_ACTIVITY_ID)
)
我需要将 ACTIVITY_CONFIG_ID 和 ACTIVITY_ASSISTANCE 从 PROGRESS_REPORT_ACTIVITY 转换为 json 并将这个 json 添加到 PROGRESS_REPORT 的 ACTIVITY_DETAILS 列中。
我尝试使用此查询形成 json:
SELECT ROW_TO_JSON(t) FROM (SELECT activity_config_id, activity_assistance FROM progress_report_activity pra inner join progress_report pr on pr.report_id=pra.report_id) t
但问题 PROGRESS_REPORT_ACTIVITY 会为同一个 report_id 返回多行,这在两个表中都很常见。
样本数据:
insert into progress_report_activity values ('1','1','11','qwerty')
insert into progress_report_activity values ('3','1','13','qwertyDup')
insert into progress_report_activity values ('2','2','12','qwerty2')
insert into progress_report_activity values ('10','2','11','qwerty12223')
insert into progress_report values ('1','123','taltz',123,123456,true,null,null);
insert into progress_report values ('10','123','olumiant',123,123456,true, null,null)
预期输出:以下是两种不同的输出格式,您能否建议对这两种格式的查询。
1]示例 progress_report 行应如下所示:
1,123,taltz,123,123456,true, {"activity_config_id" : ["11","13"], "activity_assistance" : ["qwerty","qwertyDup"]}
2]progress_report 行示例:
1,123,taltz,123,123456,true, {"activity" : [{"activity_config_id":"11",
"activity_assistance" : "qwerty"},
{"activity_config_id":"13",
"activity_assistance" : "qwertyDup" }]
【问题讨论】:
-
已使用示例数据更新了问题
-
为 progress_report 添加了一个示例预期行
-
我已经给出了 report_id=1, '1','1','11','qwerty' , '3','1','13','qwertyDup' 这些的输出修改了两行以适合 '1','123','taltz',123,123456,true,
,null -
是的,有你的问题,是的,它应该有,为简单起见,我已将其 report_id 修改为 2
标签: sql json postgresql postgresql-9.6