如何在大查询中将数组转换为多列
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 子句来指定日期范围。我尝试将其添加到代码中,但无论我如何标记任何内容,它都无法识别任何日期范围。以上是关于如何在大查询中将数组转换为多列的主要内容,如果未能解决你的问题,请参考以下文章
在大查询中将 dd-mmm-yy 转换为 yyyy-mm-dd