Sql 将第一行与所有其他行合并|大查询

Sql 将第一行与所有其他行合并|大查询,sql,google-bigquery,Sql,Google Bigquery,我正在尝试为客户寻找所有可能的购买路线。我目前呈现数据的方式如下所示: email purchase_order sku first_order second_order third_order abc@email.com 1 PS2525 PS2525 null null abc@email.com 2 PS2525 PS2525

我正在尝试为客户寻找所有可能的购买路线。我目前呈现数据的方式如下所示:

email           purchase_order  sku      first_order  second_order  third_order  
abc@email.com   1               PS2525   PS2525       null          null         
abc@email.com   2               PS2525   PS2525       PS2525        null         
abc@email.com   2               LG1515   PS2525       LG1515        null         
abc@email.com   3               PS2525   PS2525       null          PS2525       
abc@email.com   3               RG7578   PS2525       null          RG7578       
但我要找的是每次购买的路线。我希望我的数据如下所示:

email           first_order  second_order  third_order  
abc@email.com   PS2525       PS2525        PS2525       
abc@email.com   PS2525       PS2525        RG7578       
abc@email.com   PS2525       LG1515        PS2525       
abc@email.com   PS2525       LG1515        RG7578    

这显示了客户在第一次订购后所走的每一条路线。有没有办法创建这种类型的表?我很难想出一种方法来实现这一点。

看起来您想要:

select email, sku, max(first_order), max(second_order), max(third_order)
from t
group by email, sku;

下面是BigQuery标准SQL

#standardSQL
SELECT email, o1.sku AS first_order, o2.sku AS second_order, o3.sku AS third_order
FROM `project.dataset.table` o1
LEFT JOIN `project.dataset.table` o2
USING(email) 
LEFT JOIN `project.dataset.table` o3
USING(email) 
WHERE o1.purchase_order = 1
AND o2.purchase_order = 2
AND o3.purchase_order = 3
如果应用于问题中的样本数据,则输出为

Row email           first_order second_order    third_order  
1   abc@email.com   PS2525      PS2525          PS2525   
2   abc@email.com   PS2525      PS2525          RG7578   
3   abc@email.com   PS2525      LG1515          PS2525   
4   abc@email.com   PS2525      LG1515          RG7578   

最多只有三份订单?是的,只有三份订单是我设定的限制。