Sql 在BigQuery中取消对多个列的测试

Sql 在BigQuery中取消对多个列的测试,sql,google-bigquery,Sql,Google Bigquery,我在处理一个最不合理的问题时遇到了麻烦。下面是一个查询示例,我当前得到的结果和我希望从中得到的结果 有一点背景,我目前正在做的上传是用A而不是隔开ID,强制将其作为字符串而不是数字,因为同一单元格中有多个ID。价格也由,分开。正在上载的数据示例: Name | Date | Item_ID | Price John | 4/17/2020 | 123A456A678 | 19.99,21.99,30.00 Joe | 4/17

我在处理一个最不合理的问题时遇到了麻烦。下面是一个查询示例,我当前得到的结果和我希望从中得到的结果

有一点背景,我目前正在做的上传是用
A
而不是
隔开
ID
强制将其作为字符串而不是数字,因为同一单元格中有多个ID。
价格
也由
分开。正在上载的数据示例:

    Name    |    Date    |   Item_ID   |  Price
    John    |  4/17/2020 | 123A456A678 | 19.99,21.99,30.00
    Joe     |  4/17/2020 | 555A777A888 | 8.99,10.00,15.99
    Jake    |  4/18/2020 |   444A333   | 15.99,9.00
    John    |  4/18/2020 |     432     | 75.99
    Megan   |  4/18/2020 | 12A890A23A99| 5.99,6.99,9.99,10.00
这是在尝试取消测试之前表中数据的示例。下面是当前UNNEST查询的示例以及输出示例

With data AS(
  SELECT
    Name,
    Date,
    SPLIT(Item_ID, 'A') AS Item_ID_Split,
    SPLIT(Price, ',') AS Price_Split
FROM
  Example.Table
SELECT
  Name,
  Date,
  Item_ID_Split,
  Price_Split
FROM data,
UNNEST(Item_ID_Split) Item_ID_Split WITH OFFSET pos1
UNNEST(Price_Split) Price_Split WITH OFFSET pos2
当前输出如下所示:

    Name   |    Date   |  Item_ID_Split | Price_Split
    John   | 4/17/2020 |      123       |   19.99
    John   | 4/17/2020 |      456       |   19.99
    John   | 4/17/2020 |      678       |   19.99
    John   | 4/17/2020 |      123       |   21.99
    John   | 4/17/2020 |      456       |   21.99
    John   | 4/17/2020 |      678       |   21.99
    John   | 4/17/2020 |      123       |   30.00
    John   | 4/17/2020 |      456       |   30.00
    John   | 4/17/2020 |      678       |   30.00
    Joe    | 4/17/2020 |      555       |   8.99
    Joe    | 4/17/2020 |      777       |   8.99
    Joe    | 4/17/2020 |      888       |   8.99
    Joe    | 4/17/2020 |      555       |   10.00
    Joe    | 4/17/2020 |      777       |   10.00
    Joe    | 4/17/2020 |      888       |   10.00
    Joe    | 4/17/2020 |      555       |   15.99
    Joe    | 4/17/2020 |      777       |   15.99
    Joe    | 4/17/2020 |      888       |   15.99
    Jake   | 4/18/2020 |      444       |   15.99
    Jake   | 4/18/2020 |      333       |   15.99
    Jake   | 4/18/2020 |      444       |   9.00
    Jake   | 4/18/2020 |      333       |   9.00
    John   | 4/18/2020 |      432       |   75.99
    Megan  | 4/18/2020 |      12        |   5.99
    Megan  | 4/18/2020 |      890       |   5.99
    Megan  | 4/18/2020 |      23        |   5.99
    Megan  | 4/18/2020 |      99        |   5.99
    Megan  | 4/18/2020 |      12        |   6.99
    Megan  | 4/18/2020 |      890       |   6.99
    Megan  | 4/18/2020 |      23        |   6.99
    Megan  | 4/18/2020 |      99        |   6.99
    Megan  | 4/18/2020 |      12        |   9.99
    Megan  | 4/18/2020 |      890       |   9.99
    Megan  | 4/18/2020 |      23        |   9.99
    Megan  | 4/18/2020 |      99        |   9.99
    Megan  | 4/18/2020 |      12        |   10.00
    Megan  | 4/18/2020 |      890       |   10.00
    Megan  | 4/18/2020 |      23        |   10.00
    Megan  | 4/18/2020 |      99        |   10.00
    Name   |    Date   |  Item_ID_Split | Price_Split
    John   | 4/17/2020 |      123       |   19.99
    John   | 4/17/2020 |      456       |   21.99
    John   | 4/17/2020 |      678       |   30.00
    Joe    | 4/17/2020 |      555       |   8.99
    Joe    | 4/17/2020 |      777       |   10.00
    Joe    | 4/17/2020 |      888       |   15.99
    Jake   | 4/18/2020 |      444       |   15.99
    Jake   | 4/18/2020 |      333       |   9.00
    John   | 4/18/2020 |      432       |   75.99
    Megan  | 4/18/2020 |      12        |   5.99
    Megan  | 4/18/2020 |      890       |   6.99
    Megan  | 4/18/2020 |      23        |   9.99
    Megan  | 4/18/2020 |      99        |   10.00
这是上述查询的当前输出。正如您所看到的,存在重复的商品标识/价格,我希望得到的结果如下:

    Name   |    Date   |  Item_ID_Split | Price_Split
    John   | 4/17/2020 |      123       |   19.99
    John   | 4/17/2020 |      456       |   19.99
    John   | 4/17/2020 |      678       |   19.99
    John   | 4/17/2020 |      123       |   21.99
    John   | 4/17/2020 |      456       |   21.99
    John   | 4/17/2020 |      678       |   21.99
    John   | 4/17/2020 |      123       |   30.00
    John   | 4/17/2020 |      456       |   30.00
    John   | 4/17/2020 |      678       |   30.00
    Joe    | 4/17/2020 |      555       |   8.99
    Joe    | 4/17/2020 |      777       |   8.99
    Joe    | 4/17/2020 |      888       |   8.99
    Joe    | 4/17/2020 |      555       |   10.00
    Joe    | 4/17/2020 |      777       |   10.00
    Joe    | 4/17/2020 |      888       |   10.00
    Joe    | 4/17/2020 |      555       |   15.99
    Joe    | 4/17/2020 |      777       |   15.99
    Joe    | 4/17/2020 |      888       |   15.99
    Jake   | 4/18/2020 |      444       |   15.99
    Jake   | 4/18/2020 |      333       |   15.99
    Jake   | 4/18/2020 |      444       |   9.00
    Jake   | 4/18/2020 |      333       |   9.00
    John   | 4/18/2020 |      432       |   75.99
    Megan  | 4/18/2020 |      12        |   5.99
    Megan  | 4/18/2020 |      890       |   5.99
    Megan  | 4/18/2020 |      23        |   5.99
    Megan  | 4/18/2020 |      99        |   5.99
    Megan  | 4/18/2020 |      12        |   6.99
    Megan  | 4/18/2020 |      890       |   6.99
    Megan  | 4/18/2020 |      23        |   6.99
    Megan  | 4/18/2020 |      99        |   6.99
    Megan  | 4/18/2020 |      12        |   9.99
    Megan  | 4/18/2020 |      890       |   9.99
    Megan  | 4/18/2020 |      23        |   9.99
    Megan  | 4/18/2020 |      99        |   9.99
    Megan  | 4/18/2020 |      12        |   10.00
    Megan  | 4/18/2020 |      890       |   10.00
    Megan  | 4/18/2020 |      23        |   10.00
    Megan  | 4/18/2020 |      99        |   10.00
    Name   |    Date   |  Item_ID_Split | Price_Split
    John   | 4/17/2020 |      123       |   19.99
    John   | 4/17/2020 |      456       |   21.99
    John   | 4/17/2020 |      678       |   30.00
    Joe    | 4/17/2020 |      555       |   8.99
    Joe    | 4/17/2020 |      777       |   10.00
    Joe    | 4/17/2020 |      888       |   15.99
    Jake   | 4/18/2020 |      444       |   15.99
    Jake   | 4/18/2020 |      333       |   9.00
    John   | 4/18/2020 |      432       |   75.99
    Megan  | 4/18/2020 |      12        |   5.99
    Megan  | 4/18/2020 |      890       |   6.99
    Megan  | 4/18/2020 |      23        |   9.99
    Megan  | 4/18/2020 |      99        |   10.00
这是我正在寻找的结果,在
项目ID\u分割
价格分割
之间没有任何重复。我尝试将
SPLIT
函数放在
unest
中,但得到了相同的输出。我不完全确定如何做到这一点,所以任何帮助都将不胜感激


提前谢谢你

您可以对偏移量使用

SELECT Name, Date, Item_ID_Split, Price_Split
FROM data LEFT JOIN
     UNNEST(Item_ID_Split) Item_ID_Split WITH OFFSET pos1
     ON 1=1 LEFT JOIN
     UNNEST(Price_Split) Price_Split WITH OFFSET pos2
     ON pos1 = po2;

您可以对偏移量使用

SELECT Name, Date, Item_ID_Split, Price_Split
FROM data LEFT JOIN
     UNNEST(Item_ID_Split) Item_ID_Split WITH OFFSET pos1
     ON 1=1 LEFT JOIN
     UNNEST(Price_Split) Price_Split WITH OFFSET pos2
     ON pos1 = po2;

下面是BigQuery标准SQL

#standardSQL
SELECT Name, Day, Splits.*
FROM (
  SELECT Name, Day, 
    ARRAY(
      SELECT AS STRUCT Item_ID_Split, Price_Split
      FROM UNNEST(SPLIT(Item_ID, 'A')) AS Item_ID_Split WITH OFFSET
      JOIN UNNEST(SPLIT(Price, ',')) AS Price_Split WITH OFFSET
      USING(OFFSET)
    ) AS arr
  FROM `project.dataset.table`
), UNNEST(arr) Splits   
如果要应用于样本数据,请按照下面的示例回答您的问题

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'John' Name, '4/17/2020' Day, '123A456A678' Item_ID,'19.99,21.99,30.00' Price UNION ALL
  SELECT 'Joe', '4/17/2020', '555A777A888','8.99,10.00,15.99' UNION ALL
  SELECT 'Jake', '4/18/2020', '444A333','15.99,9.00' UNION ALL
  SELECT 'John', '4/18/2020', '432','75.99' UNION ALL
  SELECT 'Megan', '4/18/2020', '12A890A23A99','5.99,6.99,9.99,10.00' 
)
SELECT Name, Day, Splits.*
FROM (
  SELECT Name, Day, 
    ARRAY(
      SELECT AS STRUCT Item_ID_Split, Price_Split
      FROM UNNEST(SPLIT(Item_ID, 'A')) AS Item_ID_Split WITH OFFSET
      JOIN UNNEST(SPLIT(Price, ',')) AS Price_Split WITH OFFSET
      USING(OFFSET)
    ) AS arr
  FROM `project.dataset.table`
), UNNEST(arr) Splits   
输出是

Row Name    Day         Item_ID_Split   Price_Split  
1   John    4/17/2020   123             19.99    
2   John    4/17/2020   456             21.99    
3   John    4/17/2020   678             30.00    
4   Joe     4/17/2020   555             8.99     
5   Joe     4/17/2020   777             10.00    
6   Joe     4/17/2020   888             15.99    
7   Jake    4/18/2020   444             15.99    
8   Jake    4/18/2020   333             9.00     
9   John    4/18/2020   432             75.99    
10  Megan   4/18/2020   12              5.99     
11  Megan   4/18/2020   890             6.99     
12  Megan   4/18/2020   23              9.99     
13  Megan   4/18/2020   99              10.00   

下面是BigQuery标准SQL

#standardSQL
SELECT Name, Day, Splits.*
FROM (
  SELECT Name, Day, 
    ARRAY(
      SELECT AS STRUCT Item_ID_Split, Price_Split
      FROM UNNEST(SPLIT(Item_ID, 'A')) AS Item_ID_Split WITH OFFSET
      JOIN UNNEST(SPLIT(Price, ',')) AS Price_Split WITH OFFSET
      USING(OFFSET)
    ) AS arr
  FROM `project.dataset.table`
), UNNEST(arr) Splits   
如果要应用于样本数据,请按照下面的示例回答您的问题

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'John' Name, '4/17/2020' Day, '123A456A678' Item_ID,'19.99,21.99,30.00' Price UNION ALL
  SELECT 'Joe', '4/17/2020', '555A777A888','8.99,10.00,15.99' UNION ALL
  SELECT 'Jake', '4/18/2020', '444A333','15.99,9.00' UNION ALL
  SELECT 'John', '4/18/2020', '432','75.99' UNION ALL
  SELECT 'Megan', '4/18/2020', '12A890A23A99','5.99,6.99,9.99,10.00' 
)
SELECT Name, Day, Splits.*
FROM (
  SELECT Name, Day, 
    ARRAY(
      SELECT AS STRUCT Item_ID_Split, Price_Split
      FROM UNNEST(SPLIT(Item_ID, 'A')) AS Item_ID_Split WITH OFFSET
      JOIN UNNEST(SPLIT(Price, ',')) AS Price_Split WITH OFFSET
      USING(OFFSET)
    ) AS arr
  FROM `project.dataset.table`
), UNNEST(arr) Splits   
输出是

Row Name    Day         Item_ID_Split   Price_Split  
1   John    4/17/2020   123             19.99    
2   John    4/17/2020   456             21.99    
3   John    4/17/2020   678             30.00    
4   Joe     4/17/2020   555             8.99     
5   Joe     4/17/2020   777             10.00    
6   Joe     4/17/2020   888             15.99    
7   Jake    4/18/2020   444             15.99    
8   Jake    4/18/2020   333             9.00     
9   John    4/18/2020   432             75.99    
10  Megan   4/18/2020   12              5.99     
11  Megan   4/18/2020   890             6.99     
12  Megan   4/18/2020   23              9.99     
13  Megan   4/18/2020   99              10.00   

成功了!!!我在第二个
unest
之前的
ON 1=1
下添加了
LEFT JOIN
,因为我假设这就是您的意思。但这完美地解决了问题,非常感谢!我真的很感激!成功了!!!我在第二个
unest
之前的
ON 1=1
下添加了
LEFT JOIN
,因为我假设这就是您的意思。但这完美地解决了问题,非常感谢!我真的很感激!