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

SQL Server中UNION合并表时填充来自另一表的NULL值

解决SQL Server表合并时的NULL字段填充问题

表结构与数据

Table1(主表)

Well_idcompletion_idWell_NameApi_No10
111221Well1_Comp1Well1
112222Well2_Comp1Well2
113223Well3_Comp1Well3

Table2

Well_idcompletion_idWell_NameApi_No10
111Well1_Comp2
114Well4_Comp1
115Well5_Comp1

需求说明

需要基于CONCAT(Well_Id, '_', Well_Name)作为自定义主键Primary_Index,将Table2的数据合并到Table1中;同时当Table2的Well_id在Table1中存在时,用Table1对应的Api_No10值填充Table2中该字段的NULL值。

修改后的SQL实现

WITH Comp_View AS (
    SELECT
        Well_id,
        Completion_id,
        Well_Name,
        Api_No10,
        CONCAT(Well_Id, '_', Well_Name) AS Primary_Index
    FROM Table1
),
Pipeline_report AS (
    SELECT
        t2.Well_id,
        t2.Completion_id,
        t2.Well_Name,
        -- 优先用Table2的Api_No10,为空则取Table1对应Well_id的Api_No10
        COALESCE(t2.Api_No10, t1.Api_No10) AS Api_No10,
        CONCAT(t2.Well_Id, '_', t2.Well_Name) AS Primary_Index
    FROM Table2 t2
    LEFT JOIN Table1 t1 ON t2.Well_id = t1.Well_id
)
-- UNION自动去重,无需额外过滤重复的Primary_Index
SELECT * FROM Comp_View
UNION
SELECT * FROM Pipeline_report;

关键逻辑说明

  1. 关联主表填充NULL:在处理Table2数据的CTE中,通过LEFT JOIN关联Table1的Well_id,确保能获取到主表中对应的Api_No10值。
  2. COALESCE函数的作用:这个函数会返回参数列表中第一个非NULL的值,刚好满足“Table2有值就用自己的,没值就用主表对应值”的需求。
  3. 简化去重逻辑:原SQL用子查询过滤重复的Primary_Index,但UNION本身会自动去除完全重复的行(包括Primary_Index相同的情况),所以直接用UNION即可完成合并+去重。

验证结果

合并后的结果集中:

  • Well_id=111、Well_Name=Well1_Comp2的行,Api_No10会被填充为Well1
  • Well_id=114、115的行,因为Table1中没有对应Well_id,Api_No10保持NULL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:03:26