DELIMITER $$ CREATE OR REPLACE DEFINER=`root``localhost` PROCEDURE `bs`.`comparativeCampaign`(vDateFrom DATE, vDateTo DATE) BEGIN SELECT deparmentName, id clientFk, name clientName, CAST(SUM(previousAmmount) AS DECIMAL(10, 0)) previousAmmount, CAST(SUM(currentAmmount) AS DECIMAL(10, 0)) currentAmmount FROM ((SELECT d.name deparmentName, c.id, c.name, SUM(s.amount) previousAmmount, 0 currentAmmount FROM sale s JOIN vn.`client` c ON s.clientFk = c.id JOIN vn.department d ON d.id = c.salesDepartmentFk WHERE s.dated BETWEEN DATE_ADD(vDateFrom, INTERVAL - 1 YEAR) AND DATE_ADD(vDateTo, INTERVAL - 1 YEAR) GROUP BY d.id, s.clientFk) UNION ALL (SELECT d.name deparmentName, c.id, c.name, 0 AS previousAmmount, SUM(s.quantity * s.price) currentAmmount FROM vn.sale s JOIN vn.ticket t ON t.id = s.ticketFk JOIN vn.client c ON c.id = t.clientFk JOIN vn.department d ON d.id = c.salesDepartmentFk WHERE t.shipped BETWEEN vDateFrom AND vDateTo GROUP BY d.id, c.id) ) comparative GROUP BY deparmentName, id HAVING previousAmmount OR currentAmmount ORDER BY deparmentName, id; END$$ DELIMITER ;