string_agg在列中显示信息

时间:2018-09-20 00:55:51

标签: sql postgresql pivot crosstab

我正在使用函数 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

1 个答案:

答案 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。因此,即使您知道所有时间都不会有值,您也可以创建任意数量的列。