PDC_REPORT_CreazioneDB/sql/storedCollaudo/C6MartPeriodico_PL_S57ConfrontoPiramidi_OLD.sql
2025-06-09 17:09:11 +02:00

204 lines
6.7 KiB
Transact-SQL

-- =============================================
-- Author: Paolo Giovanetti
-- Create date: 11/11/2008
-- Description: <Description,,>
-- =============================================
-- [C6MartPeriodico].[PL_S57ConfrontoPiramidi] 'S','CCRPTR55A08H501P'
CREATE procedure [C6MartPeriodico].[PL_S57ConfrontoPiramidi_OLD]
-- Add the parameters for the stored procedure here
@Rete char(1),
@CodiceFiscale varchar(16)
AS
BEGIN
SELECT
PIRAMIDE_MOD.RETE,
PIRAMIDE_MOD.COD_FISCALE,
PIRAMIDE_MOD.ID_AREA,
PIRAMIDE_MOD.PERC_AREA,
PIRAMIDE_VERT.CTV_AREA AS CONTROVALORE
INTO #PIRAMIDE_VERT
FROM
C6MartPeriodico.PIRAMIDE_MOD
LEFT JOIN (
-- GROUP BY PER ACCORPARE I CTV_AREA SULLE PRE1 E PRE2 IN UNO UNICO CORRISPONDENTE A PRE
SELECT
RETE,
COD_FISCALE,
LEFT(ID_AREA,3) AS ID_AREA,
SUM(COALESCE(CTV,0)) AS CTV_AREA
FROM
C6MARTPERIODICO.PATRIMONIO_BF PIRAMIDE_VERT
WHERE
PIRAMIDE_VERT.RETE = @Rete
AND PIRAMIDE_VERT.COD_FISCALE = @CodiceFiscale
--modificata atringali -- AND ID_AREA NOT IN ('Cc')
GROUP BY
RETE, COD_FISCALE, LEFT(ID_AREA,3)
) PIRAMIDE_VERT
ON
PIRAMIDE_VERT.ID_AREA = PIRAMIDE_MOD.ID_AREA
WHERE
--modificata atringali -- (PIRAMIDE_MOD.ID_AREA IN ('RIS','EXT','LIQ','PRE','NA')
(PIRAMIDE_MOD.ID_AREA IN ('RIS','EXT','LIQ','PRE','NA', 'CC')
OR (PIRAMIDE_MOD.ID_AREA = 'INV' AND PIRAMIDE_MOD.NOME_PROGETTO IS NULL))
AND PIRAMIDE_MOD.RETE = @Rete
AND PIRAMIDE_MOD.COD_FISCALE = @CodiceFiscale
IF(@@ROWCOUNT>0)
BEGIN
-- Ordinamento per Area di bisogno
DECLARE @TOTControvaloreAttuale DECIMAL(20,2)
SELECT @TOTControvaloreAttuale = SUM(ATTUALE.CONTROVALORE)
FROM #PIRAMIDE_VERT ATTUALE
WHERE ATTUALE.RETE = @Rete
AND ATTUALE.COD_FISCALE = @CodiceFiscale
--V
AND ID_AREA not in ('Na', 'Cc')
--V
DECLARE @TOTCC DECIMAL (20,2)
SELECT @TOTCC = ISNULL(CONTROVALORE,0)
FROM #PIRAMIDE_VERT ATTUALE
WHERE ATTUALE.RETE = @Rete
AND ATTUALE.COD_FISCALE = @CodiceFiscale
AND ID_AREA = 'Cc'
--V
DECLARE @TOT DECIMAL (20,2)
SELECT @TOT = SUM(ISNULL(CONTROVALORE,0))
FROM #PIRAMIDE_VERT ATTUALE
WHERE ATTUALE.RETE = @Rete
AND ATTUALE.COD_FISCALE = @CodiceFiscale
SELECT
AREA_BISOGNO.ID_AREA AS NeedArea,
AREA_BISOGNO.NOME_AREA AS AreaName,
ISNULL(ATTUALE.PERC_AREA,0) AS PercentualeModello,
CASE
WHEN @TOTControvaloreAttuale = 0 THEN 0
ELSE (100 * ISNULL(ATTUALE.CONTROVALORE,0) / ISNULL(@TOTControvaloreAttuale,1))
END AS PercentualeAttuale,
ROUND(ISNULL(ATTUALE.CONTROVALORE,0),2) AS ControvaloreAttuale,
ROUND(ISNULL(ATTUALE.PERC_AREA * @TOTControvaloreAttuale / 100 , 0),2) AS ControvaloreModello,
ATTUALE.PERC_AREA AS Totale_Percentuale,
ROUND(ISNULL(ATTUALE.CONTROVALORE,0),2) - ROUND(ISNULL(ATTUALE.PERC_AREA * @TOTControvaloreAttuale / 100 , 0),2) AS DifferenzaEuro,
CASE
WHEN @TOTControvaloreAttuale = 0 THEN - ATTUALE.PERC_AREA
ELSE ISNULL( (100 * ISNULL(ATTUALE.CONTROVALORE,0) / @TOTControvaloreAttuale - ATTUALE.PERC_AREA) , 0)
END AS DifferenzaPercentuale,
ISNULL(RISCHIOAREA.VAR_PERC_PTF,0) AS var_needarea,
CASE
WHEN RISCHIOAREA.COPERTURA IS NULL THEN 'n.c.'
WHEN RISCHIOAREA.COPERTURA = 0 THEN 'n.c.'
ELSE NULL
END AS var_needareaString,
ISNULL(RISCHIOAREA.COPERTURA,0) AS copertura_needarea,
CASE
WHEN RISCHIOAREA.COPERTURA IS NULL THEN 'n.c.'
WHEN RISCHIOAREA.COPERTURA = 0 THEN '0,00'
ELSE NULL
END AS copertura_needareaString,
0 AS Nota, --TODO: VERIFICARE REGOLA PER LA NOTA
ISNULL(@TOTControvaloreAttuale,0) AS somma_controvalAttuale,
ISNULL(@TOTControvaloreAttuale,0) AS somma_controvalModello,
0.00 AS somma_percentualeAttuale,
0.00 AS somma_percentualeModello,
--V
CASE
WHEN @TOTCC = @TOT THEN 0
ELSE RISCHIOTOTALE.VAR_PERC_PTF
END AS var_tot,
CASE
--V SOLO CC -> VAR = 0
WHEN @TOTCC = @TOT THEN NULL
WHEN RISCHIOTOTALE.COPERTURA IS NULL THEN 'n.c.'
WHEN RISCHIOTOTALE.COPERTURA = 0 THEN 'n.c.'
ELSE NULL
END AS var_totString,
--V
CASE
WHEN @TOTCC = @TOT THEN 0
ELSE RISCHIOTOTALE_PIR.VAR_PERC_PTF
END as var_tot_pir,
CASE
--V SOLO CC -> VAR = 0
WHEN @TOTCC = @TOT THEN NULL
WHEN RISCHIOTOTALE_PIR.COPERTURA IS NULL THEN 'n.c.'
WHEN RISCHIOTOTALE_PIR.COPERTURA = 0 THEN 'n.c.'
ELSE NULL
END AS var_tot_pirString,
--
ISNULL(RISCHIOTOTALE.COPERTURA,0) AS copertura_tot,
CASE
WHEN RISCHIOTOTALE.COPERTURA IS NULL THEN '0,00'
WHEN RISCHIOTOTALE.COPERTURA = 0 THEN '0,00'
ELSE NULL
END AS copertura_totString,
--V
ISNULL(RISCHIOTOTALE_PIR.COPERTURA,0) AS copertura_tot_pir,
CASE
WHEN RISCHIOTOTALE_PIR.COPERTURA IS NULL THEN 'n.c.'
WHEN RISCHIOTOTALE_PIR.COPERTURA = 0 THEN 'n.c.'
ELSE NULL
END AS copertura_tot_pirString,
--
--V
RISCHIORISFIN.VAR_PERC_PTF AS VAR_RISFIN,
CASE
WHEN RISCHIORISFIN.COPERTURA IS NULL THEN 'n.c.'
WHEN RISCHIORISFIN.COPERTURA = 0 THEN 'n.c.'
ELSE NULL
END AS VAR_RISFINSTRING,
ISNULL(RISCHIORISFIN.COPERTURA,0) AS copertura_risfin,
CASE
WHEN RISCHIORISFIN.COPERTURA IS NULL THEN 'n.c.'
WHEN RISCHIORISFIN.COPERTURA = 0 THEN 'n.c.'
ELSE NULL
END AS copertura_risfinString,
AREA_BISOGNO.ORDINAMENTO AS ordinamento
FROM
C6MartPeriodico.AREA_BISOGNO
LEFT JOIN
#PIRAMIDE_VERT ATTUALE
ON
ATTUALE.ID_AREA = AREA_BISOGNO.ID_AREA
LEFT JOIN
C6MartPeriodico.RISCHIO_AGGREGATO RISCHIOAREA
ON
RISCHIOAREA.RETE = ATTUALE.RETE
AND RISCHIOAREA.COD_FISCALE = ATTUALE.COD_FISCALE
AND
RISCHIOAREA.COD_AGGREG = (
CASE WHEN ATTUALE.ID_AREA IN ('EXT','INV','PRE','RIS','LIQ')
THEN 'RISFIN|PIRAMIDE|' + ATTUALE.ID_AREA
WHEN ATTUALE.ID_AREA = 'NA'
THEN 'RISFIN|NA'
WHEN ATTUALE.ID_AREA = 'CC'
THEN 'COMPLESSIVO|BF|CC'
END
)
LEFT JOIN
C6MartPeriodico.RISCHIO_AGGREGATO RISCHIOTOTALE
ON
RISCHIOTOTALE.RETE = ATTUALE.RETE
AND RISCHIOTOTALE.COD_FISCALE = ATTUALE.COD_FISCALE
AND RISCHIOTOTALE.COD_AGGREG = 'COMPLESSIVO|BF'
--V
LEFT JOIN
C6MartPeriodico.RISCHIO_AGGREGATO RISCHIOTOTALE_PIR
ON
RISCHIOTOTALE_PIR.RETE = ATTUALE.RETE
AND RISCHIOTOTALE_PIR.COD_FISCALE = ATTUALE.COD_FISCALE
AND RISCHIOTOTALE_PIR.COD_AGGREG = 'RISFIN|PIRAMIDE'
LEFT JOIN
C6MartPeriodico.RISCHIO_AGGREGATO RISCHIORISFIN
ON
RISCHIORISFIN.RETE = ATTUALE.RETE
AND RISCHIORISFIN.COD_FISCALE = ATTUALE.COD_FISCALE
AND RISCHIORISFIN.COD_AGGREG = 'RISFIN'
--
/*WHERE
AREA_BISOGNO.ORDINAMENTO < 6*/
ORDER BY AREA_BISOGNO.ORDINAMENTO
END
ELSE
SELECT *
FROM #PIRAMIDE_VERT
DROP TABLE #PIRAMIDE_VERT
END