sql - 组合数组大查询
问题描述
我有一个数组,其中有 2 个字段(产品名称和产品持续时间),并希望将它们组合成一行。
通过使用 SPLIT(我需要这样做才能进入这个阶段,因为 transactionID 是唯一的,并希望它由此拆分),它自动为我创建了一个数组,如下所示:
Transaction ID ProductName ProductDuration
1234 Ents 14D
Movies 7D
Sports NONE
---------------------------------------------------------
5678 Movies 7D
Kids 14D
这是我用来进入当前阶段的代码:
SELECT
TransactionID
,SPLIT ( c_ProductName, "|") as ProductName
,SPLIT ( c_ProductTrialDuration , "|") as ProductDuration
理想情况下,按照下面的示例,我想要类似的东西
Transaction ID ProductName_Duration
---------------------------------------------------------
1234 Ents-14D
Movies-7D
Sports-NONE
---------------------------------------------------------
5678 Movies-7D
Kids-14D
我已经尝试过 ARRAY_CONCAT 但这只是在下面的产品名称中添加了持续时间(有点像联合)。
如果有人知道如何解决这个问题,那就太好了!!
谢谢
解决方案
下面是 BigQuery 标准 SQL 的示例
#standardSQL
WITH `project.dataset.table` AS (
SELECT 1234 id, ['Ents','Movies','Sports'] ProductName, ['14D','7D','NONE'] ProductDuration UNION ALL
SELECT 5678, ['Movies','Kids'], ['7D','14D']
)
SELECT id,
ARRAY(SELECT CONCAT(name, '-', duration)
FROM UNNEST(ProductName) name WITH OFFSET
JOIN UNNEST(ProductDuration) duration WITH OFFSET
USING(OFFSET)
) ProductName_Duration
FROM `project.dataset.table`
结果
Row id ProductName_Duration
1 1234 Ents-14D
Movies-7D
Sports-NONE
2 5678 Movies-7D
Kids-14D
推荐阅读
- javascript - 如何使用 smtpJS 将自生成的 PDF 添加为邮件附件?
- nginx - 如何在 ubuntu 服务器中为多个运行端口配置 https nginx 配置
- python - Airbnb在scrapy请求中重定向
- mongoose - 虚拟填充字段不会在 type-graphql 解析器中序列化
- pandas - 根据精确的行值匹配选择列
- javascript - 未捕获语法:输入意外结束
- reactjs - 在反应组件中切换特定的 div (id)
- c++ - 如何在模块中创建受复制写保护的页面?
- linux - istio:使用服务注册表进行内部 HTTPS 请求
- haskell - 理解 Haskell 中的类型和术语