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

求助:同一Operation_Seq_Number下合并物料序列的SQL实现

SQL分组合并物料序列问题求助

现有表包含字段:Header Number、Operation_Seq_Number、Material_Seq_Number、Material_item_id,以及物料数量字段(假设为MATERIAL_QUANTITY)。

需求:在同一Operation_Seq_Number下,若同一个Material_item_id对应多个不同的Material_Seq_Number,需要合并这些物料序列——保留最小的Material_Seq_Number(比如示例中的114),同时对这些序列的数量求和,最终只保留合并后的行,删除其他物料序列的行。

本人尝试了以下SQL但未达预期:

SELECT
    HEADER_NUMBER,
    WO_OPERATION_SEQ_NUMBER,
    MATERIAL_SEQ_NUMBER,
    MATERIAL_ITEM_NUMBER,
    MATERIAL_QUANTITYs
FROM xx
GROUP BY MATERIAL_ITEM_NUMBER
ORDER BY MATERIAL_SEQ_NUMBER ASC

你的SQL存在的问题

  • 分组维度错误:需求是按工单头+工序+物料id分组,你只按Material_item_id分组,会把不同工序下的同物料id错误合并,不符合需求。
  • 聚合逻辑缺失:数量需要求和,Material_Seq_Number需要保留最小值,你直接选取原字段会导致分组后值不确定(不同数据库处理规则不同)。
  • 字段名不一致:原表字段是Operation_Seq_Number,你SQL里写的是WO_OPERATION_SEQ_NUMBER,属于笔误。

正确查询SQL

如果只是需要查询合并后的结果,用以下语句:

SELECT
    HEADER_NUMBER,
    Operation_Seq_Number,
    MIN(Material_Seq_Number) AS Material_Seq_Number, -- 保留最小的物料序列
    Material_item_id,
    SUM(MATERIAL_QUANTITY) AS MATERIAL_QUANTITY -- 对数量求和
FROM xx
GROUP BY
    HEADER_NUMBER,
    Operation_Seq_Number,
    Material_item_id -- 按需求的分组维度聚合
ORDER BY
    Operation_Seq_Number,
    Material_Seq_Number ASC;

删除原表多余行的SQL(以MySQL为例)

如果需要直接删除原表中不需要的行,保留合并后的记录,可以用关联子查询的方式:

DELETE t1
FROM xx t1
JOIN (
    -- 先找出每个分组下需要保留的最小物料序列
    SELECT
        HEADER_NUMBER,
        Operation_Seq_Number,
        Material_item_id,
        MIN(Material_Seq_Number) AS keep_seq
    FROM xx
    GROUP BY HEADER_NUMBER, Operation_Seq_Number, Material_item_id
) t2 ON 
    t1.HEADER_NUMBER = t2.HEADER_NUMBER
    AND t1.Operation_Seq_Number = t2.Operation_Seq_Number
    AND t1.Material_item_id = t2.Material_item_id
    AND t1.Material_Seq_Number != t2.keep_seq;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:01:00