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

如何统计含零件组合的表中各单个零件总使用次数(SQL/Excel实现)

实现方案

SQL和Excel都可以完成这个统计需求,核心逻辑一致:先把组合格式的零件编号拆成单个零件条目,同个组合里重复出现的零件按实际出现次数计数,再把每个单个零件对应的所有计数值累加即可。


Excel 实现方法

用Power Query即可快速完成,不需要写复杂VBA,自动适配+、,两种分隔符:

  1. 选中原始数据区域,点击「数据」选项卡-「从表格/区域」,将数据导入Power Query编辑器
  2. 新增自定义列,输入以下公式将零件字符串拆分为单个零件组成的列表:
    = Text.SplitAny([Part Number], "+,")
    
    该公式会自动识别两种分隔符完成拆分,比如D+D+D会被拆为{"D","D","D"},A,C会被拆为{"A","C"}
  3. 选中新增的自定义列,点击「转换」选项卡-「展开到行」,列表内的每个零件会单独占一行,原始行的Count值会自动匹配到每一条拆分后的记录
  4. 对展开后的零件列执行分组操作,聚合规则选择对Count列求和,即可得到最终的总计数结果,导出到普通工作表即可使用。

SQL 实现方法

核心是通过字符串拆分逻辑拆解组合零件,以MySQL 8.0+版本为例,假设原始表名为part_usage,存储字段为part_number(零件编号字符串)、cnt(对应计数),代码如下:

WITH RECURSIVE split_part AS (
    -- 初始化:统一分隔符,取出第一个零件,标记剩余待拆分字符串
    SELECT 
        cnt,
        TRIM(SUBSTRING_INDEX(part_number, sep, 1)) AS single_part,
        IF(
            LOCATE(sep, part_number) = 0,
            '',
            SUBSTRING(part_number, LOCATE(sep, part_number) + 1)
        ) AS rest_str
    FROM (
        SELECT cnt, REPLACE(part_number, ',', '+') AS part_number, '+' AS sep
        FROM part_usage
    ) t
    UNION ALL
    -- 递归拆分剩余字符串,直到没有待拆分内容
    SELECT
        cnt,
        TRIM(SUBSTRING_INDEX(rest_str, sep, 1)) AS single_part,
        IF(
            LOCATE(sep, rest_str) = 0,
            '',
            SUBSTRING(rest_str, LOCATE(sep, rest_str) + 1)
        ) AS rest_str
    FROM split_part
    WHERE rest_str <> ''
)
-- 按单个零件分组求和得到最终结果
SELECT 
    single_part AS `Part Number`,
    SUM(cnt) AS `Total Count`
FROM split_part
GROUP BY single_part
ORDER BY single_part;

针对你给出的示例数据,执行后输出结果完全匹配预期:

Part NumberTotal Count
A13
B9
C11
D37

如果使用其他SQL方言,比如PostgreSQL可直接用string_to_table函数、SQL Server可用string_split配合交叉关联实现,核心逻辑完全一致,仅拆分函数的写法存在区别。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:06:25