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

如何合并重复记录?求SQL提取Code列相似字符交集的方法

解决Routes表分组后Code字段的统一提取问题

看起来你已经搞定了分组去重的核心逻辑,现在的关键是把格式混乱的Code字段统一成每组的"核心标识"——比如R14系列取R14、RT15系列取RT15。根据你的示例数据,核心规律是每组的Code都包含对应的Route数字,我们只需要提取从开头到Route数字结束的部分,下面分数据库给出具体实现:

核心思路

  1. 先按你已经确定的字段(Route, State, City, Start, End, Style)分组,确保每组是唯一的记录;
  2. 从每组的任意一个Code(比如取最小的Code)中,提取出包含Route数字的核心前缀部分;
  3. 将提取后的核心前缀作为分组后的Code值。

SQL实现(分数据库)

1. SQL Server

SELECT 
    -- 提取Code中从开头到Route数字结束的部分
    LEFT(g.TempCode, CHARINDEX(CAST(g.Route AS VARCHAR(10)), g.TempCode) + LEN(CAST(g.Route AS VARCHAR(10))) - 1) AS Code,
    g.Route,
    g.State,
    g.City,
    g.Start,
    g.[End], -- End是关键字,需用方括号包裹
    g.Style
FROM (
    -- 按目标字段分组,同时取每组的最小Code作为提取样本
    SELECT 
        Route,
        State,
        City,
        Start,
        [End],
        Style,
        MIN(Code) AS TempCode
    FROM Routes
    GROUP BY Route, State, City, Start, [End], Style
) AS g;

2. MySQL

SELECT 
    LEFT(g.TempCode, LOCATE(CONVERT(g.Route, CHAR), g.TempCode) + LENGTH(CONVERT(g.Route, CHAR)) - 1) AS Code,
    g.Route,
    g.State,
    g.City,
    g.Start,
    g.`End`, -- End是关键字,需用反引号包裹
    g.Style
FROM (
    SELECT 
        Route,
        State,
        City,
        Start,
        `End`,
        Style,
        MIN(Code) AS TempCode
    FROM Routes
    GROUP BY Route, State, City, Start, `End`, Style
) AS g;

效果验证

针对你的示例数据,这个逻辑会生成完全符合预期的结果:

  • R14系列(Route=14,High风格):从R14/R14-01中提取出R14;
  • R15系列(Route=15,Low风格):从R15-1/R15B中提取出R15;
  • RT15系列(Route=15,High风格):从RT15°/RT15/H中提取出RT15。

这个方法的优势是不需要依赖固定的前缀长度,只要每组的Code包含对应的Route数字,就能自动匹配出正确的核心标识,兼容性很强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:40:58