Я должен генерировать динамические таблицы отчетов из года в год в MySQL с помощью хранимой процедуры. Пример
Table year1
Year1 col1 col2 col3
Table year2
Year2 col1 col2 col3
In
Table3
Year1 col1 col2 col3 Year2 col1 col2 col3
Это как объединение, но динамическое. Если пользователю требуется 3 года подряд, результатом должна быть одна выходная таблица со всеми столбцами внутри
Моя ситуация с 1 таблицей / год. Я хотел бы расширить эту хранимую процедуру.
CREATE PROCEDURE `Sp_DettaglioCapitolo`(in varAnno smallint,in varCategoria int,in varCapitolo int)
BEGIN
declare cur_idProcedura int;
declare cur_descrizioneEstesa char(200);
declare finished integer default 0;
declare varCapitoloIntestazione varchar(10) default 'Tutti';
declare varCategoriaString varchar(100) default '';
declare nrProcedure int;
declare descrizioneEstesa char(200);
declare nrProcedureAnnoSelezionato int;
declare impegniCompetenza decimal(20,2);
declare impegniLetteraF decimal(20,2);
declare pagamentiCompetenza decimal(20,2);
declare pagamenti decimal(20,2);
declare tot_nrProcedure int default 0;
declare tot_nrProcedureAnnoSelezionato int default 0;
declare tot_impegniCompetenza decimal(20,2) default 0;
declare tot_impegniLetteraF decimal(20,2) default 0;
declare tot_pagamentiCompetenza decimal(20,2) default 0;
declare tot_pagamenti decimal(20,2) default 0;
declare cursoreTabella cursor for
select idtipoprocedura, descrizionebreve from tipoprocedura
where idtipoprocedura in (1,2,3,7,8,9)
order by idtipoprocedura;
declare cursoreTabella2 cursor for
select idtipoprocedura, descrizionebreve from tipoprocedura
where idtipoprocedura >=10
order by idtipoprocedura;
declare cursoreTabella1 cursor for
select idtipoprocedura, descrizionebreve from tipoprocedura
where idtipoprocedura in (4,5,6)
order by idtipoprocedura;
declare continue handler for not found set finished = 1;
drop table if exists tabellaDettaglioCapitoloPerAnno;
create temporary table tabellaDettaglioCapitoloPerAnno (descrizioneEstesa char(200),
nrProcedure int,
nrProcedureAnnoSelezionato int,
impegniCompetenza decimal(20,2),
impegniLetteraF decimal(20,2),
pagamentiCompetenza decimal(20,2),
pagamenti decimal(20,2));
case when varCapitolo <> 0 then
set varCategoriaString = concat('Categoria: ', varCategoria, ' - ', 'Capitolo: ',varCapitolo);
when varCapitolo = 0 then
set varCategoriaString = concat('Categoria: ', varCategoria, ' - ', 'Capitolo: ',varCapitoloIntestazione);
end case;
insert into tabellaDettaglioCapitoloPerAnno (descrizioneEstesa,nrProcedure,nrProcedureAnnoSelezionato,impegniCompetenza,impegniLetteraF,pagamentiCompetenza,pagamenti)
values (varCategoriaString,null,null,null,null,null,null);
insert into tabellaDettaglioCapitoloPerAnno (descrizioneEstesa,nrProcedure,nrProcedureAnnoSelezionato,impegniCompetenza,impegniLetteraF,pagamentiCompetenza,pagamenti)
values ('ACQUISTI EXTRA CONSIP',null,null,null,null,null,null);
open cursoreTabella;
loopTabella: loop
fetch cursoreTabella into
cur_idProcedura,cur_descrizioneEstesa;
if finished = 1 then
leave loopTabella;
end if;
set descrizioneEstesa = cur_descrizioneEstesa;
set nrProcedureAnnoSelezionato = fn_DettaglioCapitoloNrProcedureAnnoSelezionato(varAnno, varCategoria, varCapitolo, cur_idProcedura);
set impegniCompetenza = fn_DettaglioCapitoloPerAnnoImpegniCompetenza(varAnno, varCategoria, varCapitolo, cur_idProcedura);
set nrProcedure = fn_DettaglioCapitoloPerAnnoNrProcedure(varAnno, varCategoria, varCapitolo, cur_idProcedura);
set impegniLetteraF = fn_DettaglioCapitoloPerAnnoLetteraF(varAnno, varCategoria, varCapitolo, cur_idProcedura);
set pagamentiCompetenza = fn_DettaglioCapitoloPerAnnoPagamentiCompetenza(varAnno, varCategoria, varCapitolo, cur_idProcedura);
set pagamenti = fn_DettaglioCapitoloPagamenti(varAnno, varCategoria, varCapitolo, cur_idProcedura);
insert into tabellaDettaglioCapitoloPerAnno (descrizioneEstesa,nrProcedure,nrProcedureAnnoSelezionato,impegniCompetenza,impegniLetteraF,pagamentiCompetenza,pagamenti)
values (descrizioneEstesa,nrProcedure,nrProcedureAnnoSelezionato,impegniCompetenza,impegniLetteraF,pagamentiCompetenza,pagamenti);
set tot_nrProcedure = tot_nrProcedure + nrProcedure;
set tot_nrProcedureAnnoSelezionato = tot_nrProcedureAnnoSelezionato + nrProcedureAnnoSelezionato;
set tot_impegniCompetenza = tot_impegniCompetenza + impegniCompetenza;
set tot_impegniLetteraF = tot_impegniLetteraF + impegniLetteraF;
set tot_pagamentiCompetenza = tot_pagamentiCompetenza + pagamentiCompetenza;
set tot_pagamenti = tot_pagamenti + pagamenti;
end loop;
insert into tabellaDettaglioCapitoloPerAnno (descrizioneEstesa,nrProcedure,nrProcedureAnnoSelezionato,impegniCompetenza,impegniLetteraF,pagamentiCompetenza,pagamenti)
values ('TOTALE ACQUISTI EXTRA CONSIP',tot_nrProcedure,tot_nrProcedureAnnoSelezionato,tot_impegniCompetenza,tot_impegniLetteraF,tot_pagamentiCompetenza,tot_pagamenti);
set tot_nrProcedure = 0;
set tot_nrProcedureAnnoSelezionato = 0;
set tot_impegniCompetenza = 0;
set tot_impegniLetteraF = 0;
set tot_pagamentiCompetenza = 0;
set tot_pagamenti = 0;
set finished = 0;
insert into tabellaDettaglioCapitoloPerAnno (descrizioneEstesa,nrProcedure,nrProcedureAnnoSelezionato,impegniCompetenza,impegniLetteraF,pagamentiCompetenza,pagamenti)
values ('ACQUISTI TRAMITE CONSIP',null,null,null,null,null,null);
open cursoreTabella1;
loopTabella1: loop
fetch cursoreTabella1 into
cur_idProcedura,cur_descrizioneEstesa;
if finished = 1 then
leave loopTabella1;
end if;
set descrizioneEstesa = cur_descrizioneEstesa;
set nrProcedureAnnoSelezionato = fn_DettaglioCapitoloNrProcedureAnnoSelezionato(varAnno, varCategoria, varCapitolo, cur_idProcedura);
set impegniCompetenza = fn_DettaglioCapitoloPerAnnoImpegniCompetenza(varAnno, varCategoria, varCapitolo, cur_idProcedura);
set nrProcedure = fn_DettaglioCapitoloPerAnnoNrProcedure(varAnno, varCategoria, varCapitolo, cur_idProcedura);
set impegniLetteraF = fn_DettaglioCapitoloPerAnnoLetteraF(varAnno, varCategoria, varCapitolo, cur_idProcedura);
set pagamentiCompetenza = fn_DettaglioCapitoloPerAnnoPagamentiCompetenza(varAnno, varCategoria, varCapitolo, cur_idProcedura);
set pagamenti = fn_DettaglioCapitoloPagamenti(varAnno, varCategoria, varCapitolo, cur_idProcedura);
insert into tabellaDettaglioCapitoloPerAnno (descrizioneEstesa,nrProcedure,nrProcedureAnnoSelezionato,impegniCompetenza,impegniLetteraF,pagamentiCompetenza,pagamenti)
values (descrizioneEstesa,nrProcedure,nrProcedureAnnoSelezionato,impegniCompetenza,impegniLetteraF,pagamentiCompetenza,pagamenti);
set tot_nrProcedure = tot_nrProcedure + nrProcedure;
set tot_nrProcedureAnnoSelezionato = tot_nrProcedureAnnoSelezionato + nrProcedureAnnoSelezionato;
set tot_impegniCompetenza = tot_impegniCompetenza + impegniCompetenza;
set tot_impegniLetteraF = tot_impegniLetteraF + impegniLetteraF;
set tot_pagamentiCompetenza = tot_pagamentiCompetenza + pagamentiCompetenza;
set tot_pagamenti = tot_pagamenti + pagamenti;
end loop;
insert into tabellaDettaglioCapitoloPerAnno (descrizioneEstesa,nrProcedure,nrProcedureAnnoSelezionato,impegniCompetenza,impegniLetteraF,pagamentiCompetenza,pagamenti)
values ('TOTALE ACQUISTI TRAMITE CONSIP',tot_nrProcedure,tot_nrProcedureAnnoSelezionato,tot_impegniCompetenza,tot_impegniLetteraF,tot_pagamentiCompetenza,tot_pagamenti);
set tot_nrProcedure = 0;
set tot_nrProcedureAnnoSelezionato = 0;
set tot_impegniCompetenza = 0;
set tot_impegniLetteraF = 0;
set tot_pagamentiCompetenza = 0;
set tot_pagamenti = 0;
set finished = 0;
insert into tabellaDettaglioCapitoloPerAnno (descrizioneEstesa,nrProcedure,nrProcedureAnnoSelezionato,impegniCompetenza,impegniLetteraF,pagamentiCompetenza,pagamenti)
values ('VARIE',null,null,null,null,null,null);
open cursoreTabella2;
loopTabella2: loop
fetch cursoreTabella2 into
cur_idProcedura,cur_descrizioneEstesa;
if finished = 1 then
leave loopTabella2;
end if;
set descrizioneEstesa = cur_descrizioneEstesa;
set nrProcedureAnnoSelezionato = fn_DettaglioCapitoloNrProcedureAnnoSelezionato(varAnno, varCategoria, varCapitolo, cur_idProcedura);
set impegniCompetenza = fn_DettaglioCapitoloPerAnnoImpegniCompetenza(varAnno, varCategoria, varCapitolo, cur_idProcedura);
set nrProcedure = fn_DettaglioCapitoloPerAnnoNrProcedure(varAnno, varCategoria, varCapitolo, cur_idProcedura);
set impegniLetteraF = fn_DettaglioCapitoloPerAnnoLetteraF(varAnno, varCategoria, varCapitolo, cur_idProcedura);
set pagamentiCompetenza = fn_DettaglioCapitoloPerAnnoPagamentiCompetenza(varAnno, varCategoria, varCapitolo, cur_idProcedura);
set pagamenti = fn_DettaglioCapitoloPagamenti(varAnno, varCategoria, varCapitolo, cur_idProcedura);
insert into tabellaDettaglioCapitoloPerAnno (descrizioneEstesa,nrProcedure,nrProcedureAnnoSelezionato,impegniCompetenza,impegniLetteraF,pagamentiCompetenza,pagamenti)
values (descrizioneEstesa,nrProcedure,nrProcedureAnnoSelezionato,impegniCompetenza,impegniLetteraF,pagamentiCompetenza,pagamenti);
set tot_nrProcedure = tot_nrProcedure + nrProcedure;
set tot_nrProcedureAnnoSelezionato = tot_nrProcedureAnnoSelezionato + nrProcedureAnnoSelezionato;
set tot_impegniCompetenza = tot_impegniCompetenza + impegniCompetenza;
set tot_impegniLetteraF = tot_impegniLetteraF + impegniLetteraF;
set tot_pagamentiCompetenza = tot_pagamentiCompetenza + pagamentiCompetenza;
set tot_pagamenti = tot_pagamenti + pagamenti;
end loop;
insert into tabellaDettaglioCapitoloPerAnno (descrizioneEstesa,nrProcedure,nrProcedureAnnoSelezionato,impegniCompetenza,impegniLetteraF,pagamentiCompetenza,pagamenti)
values ('TOTALE VARIE',tot_nrProcedure,tot_nrProcedureAnnoSelezionato,tot_impegniCompetenza,tot_impegniLetteraF,tot_pagamentiCompetenza,tot_pagamenti);
set tot_nrProcedure = 0;
set tot_nrProcedureAnnoSelezionato = 0;
set tot_impegniCompetenza = 0;
set tot_impegniLetteraF = 0;
set tot_pagamentiCompetenza = 0;
set tot_pagamenti = 0;
set finished = 0;
select * from tabellaDettaglioCapitoloPerAnno;
drop temporary table tabellaDettaglioCapitoloPerAnno;
END
результат
'Categoria: 27 - Capitolo: 2270', NULL, NULL, NULL, NULL, NULL, NULL
'ACQUISTI EXTRA CONSIP', NULL, NULL, NULL, NULL, NULL, NULL
'procedura aperta', '0', '0', '0.00', '0.00', '0.00', '0.00'
'procedura ristretta', '0', '0', '0.00', '0.00', '0.00', '0.00'
'procedura negoziata', '0', '0', '0.00', '0.00', '0.00', '0.00'
...
'TOTALE VARIE', '0', '0', '0.00', '0.00', '0.00', '0.00'
должен быть примерно таким в конце
Как я могу это сделать? Спасибо