将数组取消嵌套到表 Postgres
Posted
技术标签:
【中文标题】将数组取消嵌套到表 Postgres【英文标题】:Unnest Array to table Postgres 【发布时间】:2021-05-21 18:32:42 【问题描述】:如何在 Postgres 中将 ARRAY 取消嵌套为表格格式 这些是我创建的类型
create type ngfcst.test1 as (territory character varying, territoryname character varying, parentname character varying, parentterritory character varying, lowest_level_flag character varying, count bigint);
我正在做一个 array_agg 来使用这种类型返回一个结果集。下面是函数 test12 的示例输出:
select * from test12(
'some_parameters');
OUTPUT (2 records):
"(\"rec11",rec12,\"rec13",\"rec14\",rec15,1)","(\"rec21\",rec22,\"rec23\",\"rec24\",rec25,2)"
我希望数据采用正确的表格格式,但这样做无济于事:
with main as(
select * from test12(
'some_parameters'))
select unnest(o_show_proxy::ngfcst.test1[]) as unnest_col from main;
这确实分隔了记录,但没有分隔列。 我想要从下面的查询中得到的行和列格式的输出:
select * from unnest(array[row('row11','row12','row13','row14','row15',1),
row('row21','row22','row23','row24','row25',2)]::ngfcst.test1[])
如果有任何方法可以获取行和列格式的输出,请告诉我。
【问题讨论】:
您的样本输出不一致。请检查一次 【参考方案1】:这里cross join lateral
会有所帮助 --
根据您的示例。考虑到您的函数 test12()
正在根据您的用户定义的 TYPE test1
返回正确的数组格式。
试试这个:
with cte as(
select * from test12(
'some_parameters')
)
select t.* from cte cross join lateral unnest(cte.o_show_proxy::test1[]) t;
DEMO
【讨论】:
嗨 Akhilesh,我一直在阅读交叉连接横向功能以及在何处使用它,但我无法理解它是如何工作的。你能在这里帮忙吗 请阅读post以上是关于将数组取消嵌套到表 Postgres的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 BigQuery 中取消嵌套数组,以便将嵌套数据按键值拆分为列?