从 header 和详细信息 table 创建嵌套 table
Create nested table from header and details table
我想用订单数据创建一个嵌套的 table。
我有订单和 order_details tables。关键是order_id。当我显式写入字段名称时,它工作正常,但我的 tables 每个都有大约 20 个字段。有没有办法select所有字段?
这是我现在所做的(带有几个字段的示例):
with orders as(
select
order_id
,order_date
,store
from `orders`
)
, order_details as(
select
order_id
,order_date
,product_id
,amount
from `order_details`
)
select
orders.order_id
,orders.order_date
,orders.store
,array_agg(struct(order_details.product_id,order_details.amount)) as order_details
from orders
left join order_details using(order_id)
group by 1,2,3
我想做这样的事情:
with orders as(
select
*
from `orders`
)
, order_details as(
select
*
from `order_details`
)
select
orders.*
,array_agg(struct(select order_details.*) as order_details
from orders
left join order_details using(order_id)
group by 1,2,3,4,5.........................
有什么建议如何做到这一点? group-by 必须包含订单 table 中的所有字段。有没有更好的方法?
考虑以下方法 - 完全按照您的要求行事
select
any_value(o).*,
array_agg(d) as order_details
from orders o
left join order_details d
using(order_id)
group by to_json_string(o)
我想用订单数据创建一个嵌套的 table。 我有订单和 order_details tables。关键是order_id。当我显式写入字段名称时,它工作正常,但我的 tables 每个都有大约 20 个字段。有没有办法select所有字段?
这是我现在所做的(带有几个字段的示例):
with orders as(
select
order_id
,order_date
,store
from `orders`
)
, order_details as(
select
order_id
,order_date
,product_id
,amount
from `order_details`
)
select
orders.order_id
,orders.order_date
,orders.store
,array_agg(struct(order_details.product_id,order_details.amount)) as order_details
from orders
left join order_details using(order_id)
group by 1,2,3
我想做这样的事情:
with orders as(
select
*
from `orders`
)
, order_details as(
select
*
from `order_details`
)
select
orders.*
,array_agg(struct(select order_details.*) as order_details
from orders
left join order_details using(order_id)
group by 1,2,3,4,5.........................
有什么建议如何做到这一点? group-by 必须包含订单 table 中的所有字段。有没有更好的方法?
考虑以下方法 - 完全按照您的要求行事
select
any_value(o).*,
array_agg(d) as order_details
from orders o
left join order_details d
using(order_id)
group by to_json_string(o)