Отчет о времени и материалах - процесс объединения нескольких столбцов и строк разных типов данных - PullRequest
0 голосов
/ 30 мая 2018

Я довольно новичок в 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");

1 Ответ

0 голосов
/ 30 мая 2018

Вы можете выполнить агрегирование по объединению трех типов данных столбцов:

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

Демо

Кстати, ваша текущая модель данных не годится, и в целом вам не следует хранить одну и ту же логическую вещь в нескольких столбцах.Рассмотрим только две колонки, одну для материала, а другую для количества.

...