我想将2个json串联起来:json1,json2。
每个json是select语句的结果。
选择1(json1):
select to_json(PROFITCENTERID) as table1
from (
select
'PROFITCENTERID' as name,
17 as type,
'' as value,
jsonb_build_array(
jsonb_build_object('name', 'PRCTR_NAME', 'value', PRCTR_NAME, 'type', 0, 'children', '[]'::jsonb),
jsonb_build_object('name', 'LONG_TEXT', 'value', LONG_TEXT, 'type', 0, 'children', '[]'::jsonb)
) as children
from (
select 'TESTCOSTIN' as PRCTR_NAME, 'TESTCOSTIN' as LONG_TEXT, 'ALICE' as IN_CHARGE, '11' as PRCTR_HIER_GRP,
'1000_A' as SEGMENT, 'E' as LANGU, 'E' as LANGU2, 'DE02' as CO_AREA, '0000001118' as PROFIT_CTR, '19901010' as VALIDFROM, '20201010' AS VALIDTO
UNION ALL
select 'TESTLUCIAN' as PRCTR_NAME, 'TESTLUCIAN' as LONG_TEXT, 'ALICE' as IN_CHARGE, '11' as PRCTR_HIER_GRP,
'1000_A' as SEGMENT, 'E' as LANGU, 'E' as LANGU2, 'DE02' as CO_AREA, '0000001119' as PROFIT_CTR, '19901010' as VALIDFROM, '20201010' AS VALIDTO
) c
) PROFITCENTERID
选择2(json2):
select to_json(SALES) as table2
from (
select
'PROFITCENTERID' as name,
17 as type,
'' as value,
jsonb_build_array(
jsonb_build_object('name', 'PROFIT_CTR', 'value', PROFIT_CTR, 'type', 0, 'children', '[]'::jsonb),
jsonb_build_object('name', 'PRCTR_HIER_GRP', 'value', PRCTR_HIER_GRP, 'type', 0, 'children', '[]'::jsonb)
) as children
from (
select 'TESTCOSTIN' as PRCTR_NAME, 'TESTCOSTIN' as LONG_TEXT, 'ALICE' as IN_CHARGE, '11' as PRCTR_HIER_GRP,
'1000_A' as SEGMENT, 'E' as LANGU, 'E' as LANGU2, 'DE02' as CO_AREA, '0000001118' as PROFIT_CTR, '19901010' as VALIDFROM, '20201010' AS VALIDTO
UNION ALL
select 'TESTLUCIAN' as PRCTR_NAME, 'TESTLUCIAN' as LONG_TEXT, 'ALICE' as IN_CHARGE, '11' as PRCTR_HIER_GRP,
'1000_A' as SEGMENT, 'E' as LANGU, 'E' as LANGU2, 'DE02' as CO_AREA, '0000001119' as PROFIT_CTR, '19901010' as VALIDFROM, '20201010' AS VALIDTO
) c
) SALES
有没有办法做到这一点,因为不能加入他们?
我尝试使用||但是我收到错误消息“由子查询返回的多于一行用作表达式”
谢谢!
答案 0 :(得分:0)
如果首先聚合JSON以创建字符串,则可以将它们串联起来。由于连接的字符串虽然不是有效的JSON,所以我不确定为什么要这样做,而您可能想看一下array_agg。
select (
select string_agg(to_json(SALES)::text, '') as table2
from (
select
'PROFITCENTERID' as name,
17 as type,
'' as value,
jsonb_build_array(
jsonb_build_object('name', 'PROFIT_CTR', 'value', PROFIT_CTR, 'type', 0, 'children', '[]'::jsonb),
jsonb_build_object('name', 'PRCTR_HIER_GRP', 'value', PRCTR_HIER_GRP, 'type', 0, 'children', '[]'::jsonb)
) as children
from (
select 'TESTCOSTIN' as PRCTR_NAME, 'TESTCOSTIN' as LONG_TEXT, 'ALICE' as IN_CHARGE, '11' as PRCTR_HIER_GRP,
'1000_A' as SEGMENT, 'E' as LANGU, 'E' as LANGU2, 'DE02' as CO_AREA, '0000001118' as PROFIT_CTR, '19901010' as VALIDFROM, '20201010' AS VALIDTO
UNION ALL
select 'TESTLUCIAN' as PRCTR_NAME, 'TESTLUCIAN' as LONG_TEXT, 'ALICE' as IN_CHARGE, '11' as PRCTR_HIER_GRP,
'1000_A' as SEGMENT, 'E' as LANGU, 'E' as LANGU2, 'DE02' as CO_AREA, '0000001119' as PROFIT_CTR, '19901010' as VALIDFROM, '20201010' AS VALIDTO
) c
) SALES
) || (
select string_agg(to_json(SALES)::text, '') as table2
from (
select
'PROFITCENTERID' as name,
17 as type,
'' as value,
jsonb_build_array(
jsonb_build_object('name', 'PROFIT_CTR', 'value', PROFIT_CTR, 'type', 0, 'children', '[]'::jsonb),
jsonb_build_object('name', 'PRCTR_HIER_GRP', 'value', PRCTR_HIER_GRP, 'type', 0, 'children', '[]'::jsonb)
) as children
from (
select 'TESTCOSTIN' as PRCTR_NAME, 'TESTCOSTIN' as LONG_TEXT, 'ALICE' as IN_CHARGE, '11' as PRCTR_HIER_GRP,
'1000_A' as SEGMENT, 'E' as LANGU, 'E' as LANGU2, 'DE02' as CO_AREA, '0000001118' as PROFIT_CTR, '19901010' as VALIDFROM, '20201010' AS VALIDTO
UNION ALL
select 'TESTLUCIAN' as PRCTR_NAME, 'TESTLUCIAN' as LONG_TEXT, 'ALICE' as IN_CHARGE, '11' as PRCTR_HIER_GRP,
'1000_A' as SEGMENT, 'E' as LANGU, 'E' as LANGU2, 'DE02' as CO_AREA, '0000001119' as PROFIT_CTR, '19901010' as VALIDFROM, '20201010' AS VALIDTO
) c
) SALES
);