233 lines
6.2 KiB
MySQL
233 lines
6.2 KiB
MySQL
|
DELIMITER $$
|
||
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `bi`.`analisis_ventas_evolution_add`()
|
||
|
BEGIN
|
||
|
DECLARE vPreviousPeriod INT;
|
||
|
DECLARE vCurrentPeriod INT;
|
||
|
DECLARE vLastPeriod INT;
|
||
|
DECLARE vMinPeriod INT DEFAULT 201400;
|
||
|
DECLARE vMaxPeriod INT;
|
||
|
DECLARE vYear INT;
|
||
|
DECLARE vWeek INT;
|
||
|
|
||
|
SELECT t.period INTO vMaxPeriod
|
||
|
FROM vn.`time` t
|
||
|
WHERE t.dated = util.VN_CURDATE();
|
||
|
|
||
|
-- Almacen
|
||
|
|
||
|
SET vCurrentPeriod = IFNULL(vLastPeriod, vMinPeriod);
|
||
|
|
||
|
WHILE vCurrentPeriod < vMaxPeriod
|
||
|
DO
|
||
|
SELECT MAX(Periodo) INTO vPreviousPeriod
|
||
|
FROM analisis_ventas_almacen_evolution
|
||
|
WHERE Periodo < vMaxPeriod;
|
||
|
|
||
|
SELECT MIN(period) INTO vCurrentPeriod
|
||
|
FROM vn2008.time
|
||
|
WHERE period > vPreviousPeriod;
|
||
|
|
||
|
SET vYear = FLOOR(vCurrentPeriod / 100);
|
||
|
SET vWeek = vCurrentPeriod - (vYear * 100);
|
||
|
|
||
|
DELETE FROM analisis_ventas_almacen_evolution
|
||
|
WHERE Periodo = vCurrentPeriod;
|
||
|
|
||
|
REPLACE analisis_ventas_almacen_evolution(Almacen, Ventas, Semana,Año, Periodo)
|
||
|
SELECT Almacen, SUM(Ventas) AS Ventas, vWeek, vYear, vCurrentPeriod
|
||
|
FROM (
|
||
|
SELECT almacen, SUM(Importe) AS Ventas
|
||
|
FROM analisis_ventas
|
||
|
WHERE vYear = Año
|
||
|
AND vWeek = Semana
|
||
|
GROUP BY almacen
|
||
|
UNION ALL
|
||
|
SELECT almacen, - SUM(Importe) AS Ventas
|
||
|
FROM analisis_ventas
|
||
|
WHERE vYear - 1 = Año
|
||
|
AND vWeek = Semana
|
||
|
GROUP BY almacen
|
||
|
UNION ALL
|
||
|
SELECT Almacen, Ventas
|
||
|
FROM analisis_ventas_almacen_evolution
|
||
|
WHERE Periodo = vPreviousPeriod
|
||
|
) sub
|
||
|
GROUP BY Almacen;
|
||
|
END WHILE;
|
||
|
|
||
|
-- Reino
|
||
|
|
||
|
SET vCurrentPeriod = vMinPeriod;
|
||
|
|
||
|
WHILE vCurrentPeriod < vMaxPeriod
|
||
|
DO
|
||
|
SELECT MAX(periodo) INTO vPreviousPeriod
|
||
|
FROM analisis_ventas_reino_evolution
|
||
|
WHERE periodo < vMaxPeriod;
|
||
|
|
||
|
SELECT MIN(period) INTO vCurrentPeriod
|
||
|
FROM vn2008.time
|
||
|
WHERE period > vPreviousPeriod;
|
||
|
|
||
|
SET vYear = FLOOR(vCurrentPeriod / 100);
|
||
|
SET vWeek = vCurrentPeriod - (vYear * 100);
|
||
|
|
||
|
DELETE FROM analisis_ventas_reino_evolution
|
||
|
WHERE Periodo = vCurrentPeriod;
|
||
|
|
||
|
REPLACE analisis_ventas_reino_evolution(reino, ventas, semana,año, periodo)
|
||
|
SELECT reino, SUM(ventas) AS ventas, vWeek, vYear, vCurrentPeriod
|
||
|
FROM (
|
||
|
SELECT Reino, SUM(Importe) AS ventas
|
||
|
FROM analisis_ventas
|
||
|
WHERE vYear = Año
|
||
|
AND vWeek = Semana
|
||
|
GROUP BY Reino
|
||
|
UNION ALL
|
||
|
SELECT Reino, - SUM(Importe) AS ventas
|
||
|
FROM analisis_ventas
|
||
|
WHERE vYear - 1 = Año
|
||
|
AND vWeek = Semana
|
||
|
GROUP BY Reino
|
||
|
UNION ALL
|
||
|
SELECT reino, ventas
|
||
|
FROM analisis_ventas_reino_evolution
|
||
|
WHERE Periodo = vPreviousPeriod
|
||
|
) sub
|
||
|
GROUP BY reino;
|
||
|
END WHILE;
|
||
|
|
||
|
-- Provincia
|
||
|
|
||
|
SET vCurrentPeriod = vMinPeriod;
|
||
|
|
||
|
WHILE vCurrentPeriod < vMaxPeriod
|
||
|
DO
|
||
|
SELECT MAX(periodo) INTO vPreviousPeriod
|
||
|
FROM analisis_ventas_provincia_evolution
|
||
|
WHERE periodo < vMaxPeriod;
|
||
|
|
||
|
SELECT MIN(period) INTO vCurrentPeriod
|
||
|
FROM vn2008.time
|
||
|
WHERE period > vPreviousPeriod;
|
||
|
|
||
|
SET vYear = FLOOR(vCurrentPeriod / 100);
|
||
|
SET vWeek = vCurrentPeriod - (vYear * 100);
|
||
|
|
||
|
DELETE FROM analisis_ventas_provincia_evolution
|
||
|
WHERE Periodo = vCurrentPeriod;
|
||
|
|
||
|
REPLACE analisis_ventas_provincia_evolution(provincia, countryCode, ventas, semana,año, periodo)
|
||
|
SELECT Provincia, code, SUM(ventas) AS ventas, vWeek, vYear, vCurrentPeriod
|
||
|
FROM (
|
||
|
SELECT a.Provincia, c.code, SUM(a.Importe) AS ventas
|
||
|
FROM analisis_ventas a
|
||
|
JOIN vn.province p ON p.name= a.provincia
|
||
|
JOIN vn.country c ON c.id = p.countryFk
|
||
|
WHERE vYear = a.Año
|
||
|
AND vWeek = a.Semana
|
||
|
GROUP BY a.Provincia
|
||
|
UNION ALL
|
||
|
SELECT a.Provincia, c.code, - SUM(a.Importe) AS ventas
|
||
|
FROM analisis_ventas a
|
||
|
JOIN vn.province p ON p.name= a.provincia
|
||
|
JOIN vn.country c ON c.id = p.countryFk
|
||
|
WHERE vYear - 1 = a.Año
|
||
|
AND vWeek = a.Semana
|
||
|
GROUP BY a.Provincia
|
||
|
UNION ALL
|
||
|
SELECT a.provincia,a.countryCode, a.ventas
|
||
|
FROM analisis_ventas_provincia_evolution a
|
||
|
WHERE a.Periodo = vPreviousPeriod
|
||
|
) sub
|
||
|
GROUP BY Provincia;
|
||
|
|
||
|
|
||
|
END WHILE;
|
||
|
|
||
|
-- Vista
|
||
|
|
||
|
SET vCurrentPeriod = vMinPeriod;
|
||
|
|
||
|
WHILE vCurrentPeriod < vMaxPeriod
|
||
|
DO
|
||
|
SELECT MAX(periodo) INTO vPreviousPeriod
|
||
|
FROM analisis_ventas_vista_evolution
|
||
|
WHERE periodo < vMaxPeriod;
|
||
|
|
||
|
SELECT MIN(period) INTO vCurrentPeriod
|
||
|
FROM vn2008.time
|
||
|
WHERE period > vPreviousPeriod;
|
||
|
|
||
|
SET vYear = FLOOR(vCurrentPeriod / 100);
|
||
|
SET vWeek = vCurrentPeriod - (vYear * 100);
|
||
|
|
||
|
DELETE FROM analisis_ventas_vista_evolution
|
||
|
WHERE Periodo = vCurrentPeriod;
|
||
|
|
||
|
REPLACE analisis_ventas_vista_evolution(vista, ventas, semana,año, periodo)
|
||
|
SELECT vista, SUM(ventas) AS ventas, vWeek, vYear, vCurrentPeriod
|
||
|
FROM (
|
||
|
SELECT Vista, SUM(Importe) AS ventas
|
||
|
FROM analisis_ventas
|
||
|
WHERE vYear = Año
|
||
|
AND vWeek = Semana
|
||
|
GROUP BY Vista
|
||
|
UNION ALL
|
||
|
SELECT Vista, - SUM(Importe) AS ventas
|
||
|
FROM analisis_ventas
|
||
|
WHERE vYear - 1 = Año
|
||
|
AND vWeek = Semana
|
||
|
GROUP BY Vista
|
||
|
UNION ALL
|
||
|
SELECT vista, ventas
|
||
|
FROM analisis_ventas_vista_evolution
|
||
|
WHERE Periodo = vPreviousPeriod
|
||
|
) sub
|
||
|
GROUP BY Vista;
|
||
|
END WHILE;
|
||
|
|
||
|
-- Vendedor
|
||
|
|
||
|
SET vCurrentPeriod = vMinPeriod;
|
||
|
|
||
|
WHILE vCurrentPeriod < vMaxPeriod
|
||
|
DO
|
||
|
SELECT MAX(periodo) INTO vPreviousPeriod
|
||
|
FROM analisis_ventas_vendedor_evolution
|
||
|
WHERE periodo < vMaxPeriod;
|
||
|
|
||
|
SELECT MIN(period) INTO vCurrentPeriod
|
||
|
FROM vn2008.time
|
||
|
WHERE period > vPreviousPeriod;
|
||
|
|
||
|
SET vYear = FLOOR(vCurrentPeriod / 100);
|
||
|
SET vWeek = vCurrentPeriod - (vYear * 100);
|
||
|
|
||
|
DELETE FROM analisis_ventas_vendedor_evolution
|
||
|
WHERE Periodo = vCurrentPeriod;
|
||
|
|
||
|
REPLACE analisis_ventas_vendedor_evolution(vendedor, ventas, semana,año, periodo)
|
||
|
SELECT Comercial AS vendedor, SUM(ventas) AS ventas, vWeek, vYear, vCurrentPeriod
|
||
|
FROM (
|
||
|
SELECT Comercial, SUM(Importe) AS ventas
|
||
|
FROM analisis_ventas
|
||
|
WHERE vYear = Año
|
||
|
AND vWeek = Semana
|
||
|
GROUP BY Comercial
|
||
|
UNION ALL
|
||
|
SELECT Comercial, - SUM(Importe) AS ventas
|
||
|
FROM analisis_ventas
|
||
|
WHERE vYear - 1 = Año
|
||
|
AND vWeek = Semana
|
||
|
GROUP BY Comercial
|
||
|
UNION ALL
|
||
|
SELECT vendedor, ventas
|
||
|
FROM analisis_ventas_vendedor_evolution
|
||
|
WHERE Periodo = vPreviousPeriod
|
||
|
) sub
|
||
|
GROUP BY vendedor;
|
||
|
END WHILE;
|
||
|
END$$
|
||
|
DELIMITER ;
|