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

基于数据区间合并SQL Server两表的列匹配问题求助

解决SQL Server区间重叠合并并保留所有样本的问题

针对合并Table1与Table2、保留所有Sample并匹配对应Table1.Code,同时拆分重叠区间的需求,可通过区间重叠匹配+子区间计算+UNION ALL补全无匹配记录的方式实现,具体方案如下:

实现SQL语句

-- 处理有匹配Table1区间的情况,拆分出重叠子区间
SELECT
    t2.Sample,
    MAX(t2.DistanceFrom, t1.DistanceFrom) AS DistanceFrom,
    MIN(t2.DistanceTo, t1.DistanceTo) AS DistanceTo,
    t1.Code AS [Table1.Code]
FROM table2 t2
LEFT JOIN table1 t1
    ON t2.DistanceFrom < t1.DistanceTo 
    AND t2.DistanceTo > t1.DistanceFrom  -- 筛选区间重叠的记录
WHERE t1.Code IS NOT NULL
UNION ALL
-- 处理Table2中无任何Table1匹配的区间,保留原区间且Code为NULL
SELECT
    t2.Sample,
    t2.DistanceFrom,
    t2.DistanceTo,
    NULL AS [Table1.Code]
FROM table2 t2
WHERE NOT EXISTS (
    SELECT 1
    FROM table1 t1
    WHERE t2.DistanceFrom < t1.DistanceTo 
      AND t2.DistanceTo > t1.DistanceFrom
)
ORDER BY Sample, DistanceFrom;

代码说明

  1. 区间匹配逻辑:通过LEFT JOIN的条件筛选出Table2与Table1区间存在重叠的记录,覆盖完全包含、部分重叠等所有场景。
  2. 子区间计算:用MAX和MIN函数计算两个区间的实际重叠部分,确保结果区间的准确性,比如示例中U2的区间会拆分为与B、C分别匹配的两个子区间。
  3. 补全无匹配记录:通过NOT EXISTS筛选出Table2中无Table1区间重叠的记录,直接保留原区间并将Code设为NULL,避免样本丢失。
  4. 排序处理:按Sample和DistanceFrom排序,让结果顺序与期望输出一致。

测试结果

执行上述SQL后,将得到与你期望完全一致的结果:

SampleDistanceFromDistanceToTable1.Code
U17474.58A
U274.5874.85B
U274.8575.07C
U375.0776D
U47677NULL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:42:34