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

0

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

Теги:
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;

Основная стратегия здесь состоит в том, чтобы привести три пары материальных данных в две колонки. Затем агрегируйте по материалу и найдите сумму количества для каждого материала.

Изображение 174551

демонстрация

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

  • 0
    Что было бы хорошим способом структурировать это в базе данных / таблице? В настоящее время данные собираются из веб-формы, которая похожа на изображение, которое вы связали, материалы и количества представлены в одной таблице в виде одной строки со столбцами, такими как TicketNumber (первичный ключ), Дата, Материал1, Количество1, Материал2, Количество2, Материал3, Количество3 - если вы знаете статьи, которые могут мне помочь, я был бы признателен. Спасибо за вашу помощь, ваше решение сработало!
  • 0
    Ваша таблица должна выглядеть как изображение в моем ответе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню