首页 > 解决方案 > 组合数组大查询

问题描述

我有一个数组,其中有 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 但这只是在下面的产品名称中添加了持续时间(有点像联合)。

如果有人知道如何解决这个问题,那就太好了!!

谢谢

标签: sqlgoogle-bigquery

解决方案


下面是 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     

推荐阅读