假设我有以下表格:
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;