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
,因为我假设这就是您的意思。但这完美地解决了问题,非常感谢!我真的很感激!