时间和物料报告 - 组合多个不同数据类型的列和行的过程

问题描述 投票:0回答:1

我是MySql的新手(3个月的YouTube教程),我的大多数经验来自PHP / HTML(4 - 5年建立网站),我正在尝试为我开始收集的一些数据构建报告。

非常感谢您提供的任何帮助!

我有一个MySql数据库,它收集多列材料/产品,这些材料/产品对应于建筑工地上使用的一定数量的材料。

目前的数据如下:

Material1 | Quantity1 | Material2 | Quantity2 | Material3 | Quantity3| Concrete Bags| 35 | Hydroseed | 1300 | Diesel Fuel | 40 | Straw Wattles| 32 | Wooden Stakes| 200 | Diesel Fuel | 30 | Hydroseed | 1000 | Wooden Stakes| 100 | Diesel Fuel | 20 |


我可以使用什么查询或过程来添加相同名称材料的数量,并组合材料名称? Hydroseed has two entries, 1300 + 1000 = 2300; Diesel Fuel has three entries, 40 + 30 + 20 = 90; etc. Material1, Material2, Material3 = MaterialName

我想以下列方式显示它: MaterialName | Quantity | Concrete Bags | 35 | Hydroseed | 2300 | Straw Wattles | 32 | Wooden Stakes | 300 | Diesel Fuel | 90 |

我不确定如何处理这个问题。

我当前的查询如下所示:

("SELECT Material1 AS MaterialName FROM table UNION SELECT Material2 AS MaterialName FROM table UNION SELECT Material3 AS MaterialName FROM database GROUP BY MaterialName");

我不知道如何处理数量 - 我不知道如何组合这两个查询并使总数与正确的材料名称相匹配 - 可能是这样的东西:

("SELECT *, SUM(Quantity1 + Quantity2 + Quantity3) AS Quantity FROM table GROUP BY MaterialName");

php mysql database multiple-columns
1个回答
0
投票

您可以对三种类型的列数据的并集进行聚合:

SELECT material AS MaterialName, SUM(quantity) AS Quantity
FROM
(
    SELECT Material1 AS material, Quantity1 AS quantity FROM yourTable UNION ALL
    SELECT Material2, Quantity2 FROM yourTable UNION ALL
    SELECT Material3, Quantity3 FROM yourTable
) t
GROUP BY material;

这里的基本策略是将三对材料数据分成两列。然后,按材料聚合并找到每种材料的数量总和。

enter image description here

Demo

顺便说一句,您当前的数据模型并不好,通常您不应该在多个列中存储相同的逻辑事物。考虑只有两列,一列用于材料,另一列用于数量。

© www.soinside.com 2019 - 2024. All rights reserved.