如何在大查询中将数组转换为多列

Posted

技术标签:

【中文标题】如何在大查询中将数组转换为多列【英文标题】:How to convert an array to multiple columns in big query 【发布时间】:2021-12-03 01:16:09 【问题描述】:

我正在尝试弄清楚如何更改此数组,以便它显示跨多列而不是一起显示的返回值。

SELECT
handle,
fdc.identifiers
FROM table.fdc

代码返回以下内容

Handle Identifier
1234 3123
1233
1232
3456 1231
3411
2321
1235

代码在一列中返回所有标识符。可以拆分成多列吗?

我希望表格如下所示:

Handle Identifier
1234 3123 1233 1232
3456 1231 3411
2321
1235

代码在一列中返回所有标识符。可以拆分成多列吗?

【问题讨论】:

你能发布一个输出表应该是什么样子的例子吗? 用新表格编辑帖子以展示我需要什么。每个句柄可以有唯一数量的标识符或为空。如果需要,可以标记额外的列。 如果标识符的数量不确定,将它们返回到 ARRAY 列中可能更有意义。请参阅 Mikhail Berlyant 的回答:***.com/a/41110942/15921941 结果已经在数组中,所以任何类型的array_agg函数都不起作用。还有其他想法吗? 【参考方案1】:

考虑以下方法

select * from (
  select handle, val, offset
  from your_table t
  left join t.identifiers val with offset
)
pivot (min(val) as identifier for offset in (0, 1, 2))    

如果应用到您的问题中的虚拟数据

with your_table as (
  select 1234 handle, [3123, 1233, 1232] identifiers union all
  select 3456, [1231, 3411] union all
  select 2321, [] union all 
  select 1235, []
)    

输出是

【讨论】:

感谢您的帮助!我实际上对您的代码中发生的事情的理解为 0。你有机会解释一下吗?特别是偏移量和枢轴,以前从未使用过它们。我还需要一个 where 子句来指定日期范围。我尝试将其添加到代码中,但无论我如何标记任何内容,它都无法识别任何日期范围。

以上是关于如何在大查询中将数组转换为多列的主要内容,如果未能解决你的问题,请参考以下文章

如何在标准sql-大查询中将一列拆分为多列

在大查询中将 dd-mmm-yy 转换为 yyyy-mm-dd

如何在Oracle sql中将行转换为按多列分组的列[关闭]

如何在 Python 中将一个数组中的多列堆叠在一起?

如何在presto中将列转换为数组

如何在 PostgreSQL 8.0.2 中将列表转换为数组