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

如何基于单列子串合并SQL数据表中满足多字段匹配的同类行

解决方案

你之前的思路问题出在窗口函数的分区规则不对:DENSE_RANK的分区只按零件号前6位划分,只能区分同前6位下的不同四字段组合,没法判断每个组合对应的行数是否满足合并条件。

我们换用COUNT窗口函数直接统计每个符合合并条件的分组行数即可,实现逻辑如下:

  1. 按「零件号前6位 + 四个Thing字段的完整组合」做分区,统计每个分组的总条数
  2. 若分组条数≥2,零件号取前6位;否则保留原8位编号
  3. 最后对结果去重即可得到合并后的数据集

完整SQL代码

SELECT DISTINCT 
    [Part],
    CASE 
        WHEN group_cnt >= 2 THEN LEFT([Part Num], 6) 
        ELSE [Part Num] 
    END AS [Part Num],
    Thing1,
    Thing2,
    Thing3,
    Thing4
FROM (
    SELECT 
        *,
        COUNT(*) OVER (
            PARTITION BY LEFT([Part Num], 6), Thing1, Thing2, Thing3, Thing4
        ) AS group_cnt
    FROM MyTable
) AS t
ORDER BY [Part], [Part Num]

逻辑验证

拿你的测试数据验证:

  • 前6位为101053且四字段为abc/abc/空/空的分组共有2条记录,合并后零件号保留101053
  • 前6位为101053且四字段为abc/abc/abc/空的分组只有1条记录,保留原编号10105324
  • 其余分组逻辑同理,最终输出和你给出的预期效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:06:04