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

x0fgdtte  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(304)

我对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");

aurhwmvo

aurhwmvo1#

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

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;

这里的基本策略是将三对材料数据放入两列中。然后,按材料进行聚合,找出每种材料的数量之和。

演示

顺便说一下,您当前的数据模型不太好,一般来说,您不应该跨多个列存储相同的逻辑对象。考虑两个列,一个用于材质,另一个用于数量。

相关问题