SELECT
t.*
FROM(
SELECT
r.warehouse_id, w.name as warehouse_name, r.material_id, m.material_code, m.material_name, m.material_specifications,
m.vendor_id, m.vendor_name, m.material_unit, m.material_brand, m.procurement_subject, m.compatible_with,
m.material_warranty_period,m.reference_price, m.selling_price, m.material_url,
IFNULL(put.putNumber,0) AS putNumber, IFNULL(ret.retNumber,0) AS retNumber,
IFNULL(pic.picNumber,0) AS picNumber, IFNULL(bac.bacNumber,0) AS bacNumber,
IFNULL(put.putNumber,0) - IFNULL(ret.retNumber,0) - IFNULL(pic.picNumber,0) + IFNULL(bac.bacNumber,0) AS inventory
FROM erp_material_inventory_record r
LEFT JOIN erp_material m ON r.material_id = m.id
LEFT JOIN erp_warehouse w ON r.warehouse_id = w.id
LEFT JOIN(
SELECT warehouse_id, material_id, SUM(number) AS putNumber
FROM erp_material_inventory_record
WHERE type = '1'
GROUP BY warehouse_id, material_id
) put ON r.warehouse_id = put.warehouse_id AND r.material_id = put.material_id
LEFT JOIN(
SELECT warehouse_id, material_id, SUM(number) AS retNumber
FROM erp_material_inventory_record
WHERE type = '2'
GROUP BY warehouse_id, material_id
) ret ON r.warehouse_id = ret.warehouse_id AND r.material_id = ret.material_id
LEFT JOIN(
SELECT warehouse_id, material_id, SUM(number) AS picNumber
FROM erp_material_inventory_record
WHERE type = '3'
GROUP BY warehouse_id, material_id
) pic ON r.warehouse_id = pic.warehouse_id AND r.material_id = pic.material_id
LEFT JOIN(
SELECT warehouse_id, material_id, SUM(number) AS bacNumber
FROM erp_material_inventory_record
WHERE type = '4'
GROUP BY warehouse_id, material_id
) bac ON r.warehouse_id = bac.warehouse_id AND r.material_id = bac.material_id
GROUP BY r.warehouse_id, r.material_id
) t