You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中合并同一交易下含不同信息的两行数据?

如何合并交易表中transfer与order类型的记录,得到包含buyer_id和price的单行数据

问题背景

你有一张交易表,包含transfer(转账)和order(订单)两种事件类型:

  • buyer_id仅存储在transfer类型的记录中
  • price仅存储在order类型的记录中
  • 同一场交易的两类记录通过Trans ID关联

表结构示例:

Order ID   Trans ID    Timestamp            Category ID   Buyer ID   Price   Event type
4646820767  347571948  2022-04-02 10:05:48   8699308                 75      order
4646820796  347571948  2022-04-02 10:05:48   8699308      2530070            transfer

你当前的尝试

select a.order_id, a.asset_id, a.timestamp, a.category_id, b.buyer_id, a.price
from table a 
inner join table b
  on a.trans_id = b.trans_id

解决方案

你的关联思路方向正确,但需要明确事件类型的匹配规则,避免无效关联或错误数据。以下提供两种可行方案:

方案1:指定事件类型的JOIN

明确关联双方的事件类型,确保a是订单记录、b是转账记录:

select 
    a.order_id, 
    a.timestamp, 
    a.category_id, 
    b.buyer_id, 
    a.price
from your_table a
inner join your_table b 
    on a.trans_id = b.trans_id
    and a.event_type = 'order'
    and b.event_type = 'transfer'

注意:将your_table替换为你的实际表名;原SQL中的asset_id在提供的表结构中不存在,需根据实际表结构调整或删除

方案2:聚合函数合并(适配多记录场景)

如果同一trans_id下可能存在多条相关记录,用聚合函数提取非空字段值,自动合并为单行:

select 
    trans_id,
    max(order_id) as order_id,
    max(timestamp) as timestamp,
    max(category_id) as category_id,
    max(buyer_id) as buyer_id,
    max(price) as price
from your_table
group by trans_id

内容的提问来源于stack exchange,提问作者user19429488

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 20:35:38