The data in the blue box exists, the data in the red box must be registered,
It is to order the (data from the blue box) from largest to smallest and pass them to the column of the red box, according to their order.
What I have done so far:
CREATE DEFINER = 'root'@'localhost'
PROCEDURE PLANILLA_ROTACIONES_25_O01()
BEGIN
declare TOT_M_01 INT (20);
declare TOT_M_02 INT (20);
declare TOT_M_03 INT (20);
declare TOT_M_04 INT (20);
declare TOT_M_05 INT (20);
declare TOT_M_06 INT (20);
declare TOT_M_07 INT (20);
declare TOT_M_08 INT (20);
declare TOT_M_09 INT (20);
declare TOT_M_10 INT (20);
declare TOT_M_11 INT (20);
declare TOT_M_12 INT (20);
DECLARE no_hay_mas_registros INT DEFAULT 0;
DECLARE elCursor CURSOR FOR SELECT CODIGO FROM PLANILLA_ROTACIONES ;
open elCursor;
-- se van tomando los datos hasta que el cursor llegue al final
bucle: loop
fetch elCursor into codigo_new;
if (no_hay_mas_registros = 1) then
leave bucle;
end if;
// comentario: aca tomo el datoy lo guardo en una variable
SET TOT_M_01 = (SELECT TOTAL_M_01 FROM planilla_rotaciones WHERE CODIGO=codigo_new);
SET TOT_M_02 = (SELECT TOTAL_M_02 FROM planilla_rotaciones WHERE CODIGO=codigo_new);
SET TOT_M_03 = (SELECT TOTAL_M_03 FROM planilla_rotaciones WHERE CODIGO=codigo_new);
SET TOT_M_04 = (SELECT TOTAL_M_04 FROM planilla_rotaciones WHERE CODIGO=codigo_new);
SET TOT_M_05 = (SELECT TOTAL_M_05 FROM planilla_rotaciones WHERE CODIGO=codigo_new);
SET TOT_M_06 = (SELECT TOTAL_M_06 FROM planilla_rotaciones WHERE CODIGO=codigo_new);
SET TOT_M_07 = (SELECT TOTAL_M_07 FROM planilla_rotaciones WHERE CODIGO=codigo_new);
SET TOT_M_08 = (SELECT TOTAL_M_08 FROM planilla_rotaciones WHERE CODIGO=codigo_new);
SET TOT_M_09 = (SELECT TOTAL_M_09 FROM planilla_rotaciones WHERE CODIGO=codigo_new);
SET TOT_M_10 = (SELECT TOTAL_M_10 FROM planilla_rotaciones WHERE CODIGO=codigo_new);
SET TOT_M_11 = (SELECT TOTAL_M_11 FROM planilla_rotaciones WHERE CODIGO=codigo_new);
SET TOT_M_12 = (SELECT TOTAL_M_12 FROM planilla_rotaciones WHERE CODIGO=codigo_new);
CREATE TEMPORARY TABLE IF NOT EXISTS Temporal AS (
SELECT CODIGO,
GROUP_CONCAT(TOT_M_01,
TOT_M_02,
TOT_M_03,
TOT_M_04,
TOT_M_05,
TOT_M_06,
TOT_M_07,
TOT_M_08,
TOT_M_09,
TOT_M_10,
TOT_M_11,
TOT_M_12
order by Columnas DESC) ColumnasOrdenadas
FROM ( SELECT CODIGO,
(case when n = 1 then TOTAL_M_01
when n = 2 then TOTAL_M_02
when n = 3 then TOTAL_M_03
when n = 4 then TOTAL_M_04
when n = 5 then TOTAL_M_05
when n = 6 then TOTAL_M_06
when n = 7 then TOTAL_M_07
when n = 8 then TOTAL_M_08
when n = 9 then TOTAL_M_09
when n = 10 then TOTAL_M_10
when n = 11 then TOTAL_M_11
when n = 12 then TOTAL_M_12
end
) as Columnas
from PLANILLA_ROTACIONES a
cross join (select 1 as n union all select 2
union all select 3
union all select 3
union all select 4
union all select 5
union all select 6
union all select 7
union all select 8
union all select 9
union all select 10
union all select 11
union all select 12) n
) T
GROUP BY CODIGO
);
IF (SELECT count(CODIGO) as conteo from PLANILLA_ROTACIONES WHERE CODIGO = codigo_new ) = 1 THEN
UPDATE PLANILLA_ROTACIONES E
INNER JOIN Temporal T ON E.CODIGO = T.CODIGO
SET o_01 = CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(T.ColumnasOrdenadas, ',', 1), ',', -1),UNSIGNED INTEGER),
o_02 = CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(T.ColumnasOrdenadas, ',', 2), ',', -1),UNSIGNED INTEGER),
o_03 = CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(T.ColumnasOrdenadas, ',', 3), ',', -1),UNSIGNED INTEGER),
o_04 = CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(T.ColumnasOrdenadas, ',', 4), ',', -1),UNSIGNED INTEGER),
o_05 = CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(T.ColumnasOrdenadas, ',', 5), ',', -1),UNSIGNED INTEGER),
o_06 = CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(T.ColumnasOrdenadas, ',', 6), ',', -1),UNSIGNED INTEGER),
o_07 = CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(T.ColumnasOrdenadas, ',', 7), ',', -1),UNSIGNED INTEGER),
o_08 = CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(T.ColumnasOrdenadas, ',', 8), ',', -1),UNSIGNED INTEGER),
o_09 = CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(T.ColumnasOrdenadas, ',', 9), ',', -1),UNSIGNED INTEGER),
o_10 = CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(T.ColumnasOrdenadas, ',', 10), ',', -1),UNSIGNED INTEGER),
o_11 = CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(T.ColumnasOrdenadas, ',', 11), ',', -1),UNSIGNED INTEGER),
o_12 = CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(T.ColumnasOrdenadas, ',', 12), ',', -1),UNSIGNED INTEGER);
END IF;
end loop bucle;
close elCursor;
END
I need ideas on how I could make this arrangement from major to minor, if you can help me I would appreciate it.