将结果集的每一行获取为一个逗号分隔的字符串



假设我有以下表格:

id    col1  col2  col3
--    ----  ---- -----
1      A      A     A
2      B      B     B
3      C      C     C

我想要一个sql查询创建一个结果集,将所有列连接到一个逗号分隔的字符串中,但不指定选择中的列(col1, col2, col3):

'A', 'A', 'A'
'B', 'B', 'B'
'C', 'C', 'C'

到目前为止,我已经尝试了以下,但这给我带来的只是一行与所有行在一个字符串:

select concat('''', string_agg(value, ''','''), '''') as res
from (
select (json_each_text(row_to_json(test_table))).value
from test_table
) x

结果:‘一个’,‘‘,’",' B ', ' B ', ' B ', ' C ', ' C ', ' C '

假设id是唯一的,您应该按它分组,例如

select id, string_agg(quote_literal(value), ',')
from test_table t
cross join jsonb_each_text(to_jsonb(t)- 'id')
group by id
order by id

在Db<>Fiddle中测试。

您需要按唯一列分组,以便每个原始行获得一行:

select id, string_agg(val, ',')
from (
select id, r.val
from test_table t 
cross join jsonb_each_text(to_jsonb(t) - 'id') as r(key, val)
) x
group by id
order by id;

如果您可以使用包含所有列值的JSONB数组,那么下面的方法更简单:

select id, 
jsonb_path_query_array(to_jsonb(t) - 'id', '$.keyvalue().value')
from test_table
order by id;

相关内容

  • 没有找到相关文章

最新更新