Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在json_agg中显示和设置自定义列别名_Sql_Json_Postgresql - Fatal编程技术网

Sql 在json_agg中显示和设置自定义列别名

Sql 在json_agg中显示和设置自定义列别名,sql,json,postgresql,Sql,Json,Postgresql,基于以下示例: WITH Table_A as (select 1 as AA), Table_B AS (select 2 as BB), Table_CD AS (select 3 as CC, 4 AS DD) select json_build_object( 'X', (select json_agg(A.AA) from Table_A A) , 'Y', (select json_agg(B.*) from T

基于以下示例:

WITH Table_A as (select 1 as AA),
    Table_B AS (select 2 as BB),
    Table_CD AS (select 3 as CC, 4 AS DD)
    
        
    select json_build_object(
      'X', (select json_agg(A.AA) from Table_A A)
    , 'Y', (select json_agg(B.*) from Table_B B)
    , 'Z', (select json_agg(CD.*) from Table_CD CD)
    )
  • 为什么如果我没有直接指定列,而是使用*,它会在结果中显示列名,但当我指定它时,它不会显示
  • 结果:
    {“X”:[1],“Y”:[{“bb”:2}],“Z”:[{“cc”:3,“dd”:4}]}

  • 如何(如果可能)为列设置自定义别名?例如,结果是
  • Z:[{“custom1”:3,“custom2”:4}]}

  • 如何将不同表中的值放入单个json_agg?我尝试了几种方法,但都失败了,例如

  • 我几乎找到了解决方案,但如果任何表返回的行数超过1行,结果就会成倍增加,如何避免

    WITH TableA as (select unnest(array[1,2,3,4]) as AA),
    TableB AS (select 2 as BB)
    
    SELECT  
    json_build_object(
    'Object1', json_agg(json_build_object('Value_1', AA)) 
    ,'Object2', json_agg(json_build_object('Value_2', BB)) 
    )
    FROM TableA A
     JOIN TableB B ON TRUE
    
    WITH TableA as (select unnest(array[1,2,3,4]) as AA),
    TableB AS (select 2 as BB)
    
    SELECT  
    json_build_object(
    'Object1', json_agg(json_build_object('Value_1', AA)) 
    ,'Object2', json_agg(json_build_object('Value_2', BB)) 
    )
    FROM TableA A
     JOIN TableB B ON TRUE