0

我有一个有 2 列的表,假设第一个是客户名称,第二个是他的选择。请注意,他可以选择多个选项(1 个或多个)!也可以做第二个订单!

例如输入如下:

| Client   | Order item       |
| -------- | ---------------- |
| User 1   | 1-cola           |
| User 1   | 2-fries          |
| User 1   | 3-burger         |
| User 2   | 1-cola           |
| User 2   | 2-fries          |
| User 3   | 2-fries          |
| User 3   | 1-cola           |
| User 4   | 3-burger         |
| User 5   | 1-cola           |
| User 5   | 2-fries          |
| User 5   | 3-burger         |
| User 5   | 3-burger         |
| User 5   | 1-cola           |

我想要实现的是为每个订单获取一行,如下所示:

客户 订购商品
用户 1 1-可乐 - 2-薯条 - 3-汉堡
用户 2 1-可乐 - 2-薯条
用户 3 1-可乐 - 2-薯条
用户 4 3个汉堡
用户 5 1-可乐 - 2-薯条 - 3-汉堡
用户 5 1-可乐 - 3-汉堡

笔记!1-为了客户 3,项目在连接时订购!2- 对于客户 5,我们有 2 个订单,只需通过该订单的重复项目就可以检测到,因此将其放在新行中!

我知道这有点复杂,但我真的想知道是否可以这样做!希望我描述得很好!

BR,纳兹

4

1 回答 1

0

以下是 BigQuery 标准 SQL

select client, 
  string_agg(order_item, ' - ' order by order_item) as order_items
from (
  select *, 
    row_number() over(partition by client, order_item) as client_order
  from `project.dataset.table`
)
group by client, client_order
# order by client, client_order     

如果应用于您问题中的样本数据 - 输出是

在此处输入图像描述

注意:您在问题中描述的逻辑有点模糊 - 因此在同一客户的多个订单中识别新订单和“传播”项目可能与实际情况不同。要“解决”这个问题 - 您需要在逻辑中添加更多“玩家” - 可能是时间戳和/或指示新订单的显式行

于 2021-02-10T06:35:25.613 回答