我正在使用函数 string_agg 一起显示相同ID的一些值,并且效果很好,因为它显示了级联的信息:
SELECT string_agg(table1.value , '#BR#') as "values"
FROM table1 WHERE id=1
id | values
--------------
1 | v1#BR#v2#BR#v3#BR#v4#BR#v5#BR#v6
有没有办法在分开的列上显示信息?像这样:
id | values | values | values | values | values | values |
----------------------------------------------------------
1 | v1 | v2 | v3 | v4 | v5 | v6
答案 0 :(得分:1)
如果您可以为列数定义一个合理的上限,则可以使用以下内容:
select id,
v[1] as value_1,
v[2] as value_2,
v[3] as value_3,
v[4] as value_4,
v[5] as value_5
from (
select id, array_agg(value) as v
from table1
where id = 1
) t;
如果您希望有更多的列,只需将更多的表达式添加到外部SELECT列表中
请注意,访问不存在的数组元素不会导致错误,只会产生NULL
。因此,即使您知道所有时间都不会有值,您也可以创建任意数量的列。