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

MySQL物料报表:多列同名物料数量合并求和实现方案

解决方案

要解决这个问题,核心是先把你的宽表结构(多组Material+Quantity列)转换成窄表结构(每行对应一个物料和它的数量),然后再按物料名分组求和。以下是可行的MySQL查询语句:

SELECT MaterialName, SUM(Quantity) AS Quantity
FROM (
    -- 把每一组Material和对应的Quantity拆成单独的行
    SELECT Material1 AS MaterialName, Quantity1 AS Quantity FROM your_table
    UNION ALL
    SELECT Material2 AS MaterialName, Quantity2 AS Quantity FROM your_table
    UNION ALL
    SELECT Material3 AS MaterialName, Quantity3 AS Quantity FROM your_table
) AS unpivoted_data
GROUP BY MaterialName
ORDER BY MaterialName;

关键细节解释

  1. 用UNION ALL而非UNION:UNION会自动去重,会丢失同一物料的多条记录,导致求和结果错误;UNION ALL会保留所有行,确保我们能统计到每一个物料的所有数量。
  2. 子查询的作用:子查询负责将原表的多列数据“展开”成多行——比如原表第一行的3个物料会被拆成3条独立的记录,每条记录对应一个物料和它的数量。
  3. 分组求和:外层查询对展开后的窄表按MaterialName分组,用SUM(Quantity)计算每个物料的总数量。

为什么你之前的尝试有问题?

  • 你的第一个查询只提取了物料名,没有关联对应的数量,自然无法求和。
  • 第二个查询的SUM(Quantity1 + Quantity2 + Quantity3)逻辑错误:它是把同一行的三个数量直接相加,而同一行的三个物料是不同的,这个求和结果没有任何实际意义,不是某个物料的总数量。

如果你的表后续增加了更多MaterialN和QuantityN列,只需要在子查询里继续添加UNION ALL SELECT MaterialN AS MaterialName, QuantityN AS Quantity FROM your_table即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:05:53