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

如何将多行数据合并为一行?优先取覆盖值,空值用默认值

合并默认与覆盖数据为单行

如何将多行数据合并为一行?其中一行包含商品的默认信息,另一行包含商品的覆盖信息。需要保留所有非空的覆盖信息,若覆盖信息为NULL则使用默认信息。

原始数据表(Table1)

itemxa_intiditem_intdidprepTech_intidbuyer_intidsrv_Nameprd_Namedefault_itemxa_intid
7241561579932NULLDefault Name 1Default Name 2724156
72415715799NULL12NULLOverridden Name724156
7241581579916NULLOverridden NameNULL724156

当前查询逻辑

首先通过以下查询获取目标覆盖数据:

SELECT *
FROM Table1
WHERE itemxa_intid = 724158 -- 该信息来自另一独立查询

查询结果:

itemxa_intiditem_intdidprepTech_intidbuyer_intidsrv_Nameprd_Namedefault_itemxa_intid
7241581579916NULLOverridden NameNULL724156

再通过默认ID关联查询默认数据:

SELECT *
FROM Table1
WHERE itemxa_intid = PreviousQuery.default_itemxa_intid

查询结果:

itemxa_intiditem_intdidprepTech_intidbuyer_intidsrv_Nameprd_Namedefault_itemxa_intid
7241561579932NULLDefault Name 1Default Name 2724156

需要将这两行合并为一行,保留覆盖数据的非空值,用默认数据填充NULL,最终结果如下:

itemxa_intiditem_intdidprepTech_intidbuyer_intidsrv_Nameprd_Namedefault_itemxa_intid
7241581579916NULLOverridden NameDefault Name 2724156

解决方案

可以通过自连接结合COALESCE()函数实现需求,COALESCE()会返回第一个非NULL的参数值,正好满足用覆盖值优先、默认值补位的逻辑:

SELECT
    t1.itemxa_intid,
    t1.item_intdid,
    COALESCE(t1.prepTech_intid, t2.prepTech_intid) AS prepTech_intid,
    COALESCE(t1.buyer_intid, t2.buyer_intid) AS buyer_intid,
    COALESCE(t1.srv_Name, t2.srv_Name) AS srv_Name,
    COALESCE(t1.prd_Name, t2.prd_Name) AS prd_Name,
    t1.default_itemxa_intid
FROM Table1 t1
JOIN Table1 t2 ON t1.default_itemxa_intid = t2.itemxa_intid
WHERE t1.itemxa_intid = 724158;

逻辑说明

  • 自连接:将目标覆盖数据行(t1)和对应的默认数据行(t2)通过default_itemxa_intid关联
  • COALESCE(col1, col2):对每个字段,优先取覆盖行的非空值,若覆盖行为NULL则取默认行的值
  • 最终返回合并后的单行数据,完全符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:05:17