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

291 lines
28 KiB
SQL

-- Aggiunta GESTIONE EligoTitoli L192 (FCianfa, 26/11/2014)
CREATE procedure [C6MartPeriodicoImmobiliare].[Popola_S133_S157DatiPiramide]
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_TEMP
FROM
C6MartPeriodicoImmobiliare.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,
CASE
WHEN ID_AREA = 'SELF'
THEN LEFT(ID_AREA,4)
ELSE LEFT(ID_AREA,3)
END AS ID_AREA,
SUM(COALESCE(CTV,0)) AS CTV_AREA
FROM
C6MartPeriodicoImmobiliare.PATRIMONIO_BF PIRAMIDE_VERT
GROUP BY
RETE, COD_FISCALE,
CASE
WHEN ID_AREA = 'SELF'
THEN LEFT(ID_AREA,4)
ELSE LEFT(ID_AREA,3)
END
) PIRAMIDE_VERT
ON
PIRAMIDE_VERT.ID_AREA = PIRAMIDE_MOD.ID_AREA
and PIRAMIDE_VERT.COD_FISCALE = PIRAMIDE_MOD.COD_FISCALE
and PIRAMIDE_VERT.RETE = PIRAMIDE_MOD.RETE
WHERE
--modificata atringali -- (PIRAMIDE_MOD.ID_AREA IN ('RIS','EXT','LIQ','PRE','NA')
(PIRAMIDE_MOD.ID_AREA IN ('RIS','EXT','LIQ','PRE','NA', 'CC','SELF','INV')
--OR (PIRAMIDE_MOD.ID_AREA = 'INV' AND PIRAMIDE_MOD.NOME_PROGETTO IS NULL) /* 20161202 nome_progetto sempre diverso da null */
)
/* 20161214 - aggiunto aggragazione percentuali per area */
SELECT
RETE,
COD_FISCALE,
ID_AREA,
sum(PERC_AREA) as PERC_AREA,
CONTROVALORE
INTO #PIRAMIDE_VERT
FROM
#PIRAMIDE_VERT_TEMP
group by rete,cod_fiscale, id_area, CONTROVALORE
truncate table C6MartPeriodicoImmobiliare.TB_S133_S157DatiPiramide
insert into C6MartPeriodicoImmobiliare.TB_S133_S157DatiPiramide
SELECT distinct /* 20161202 */
ATTUALE.RETE,
ATTUALE.COD_FISCALE,
AREA_BISOGNO.ID_AREA AS NeedArea,
AREA_BISOGNO.NOME_AREA AS AreaName,
ISNULL(ATTUALE.PERC_AREA,0) AS PercentualeModello,
ISNULL(ATTUALE.CONTROVALORE,0) PercentualeAttuale,
ROUND(ISNULL(ATTUALE.CONTROVALORE,0),2) AS ControvaloreAttuale,
ISNULL(ATTUALE.PERC_AREA,0) ControvaloreModello,
ATTUALE.PERC_AREA AS Totale_Percentuale,
ISNULL(ATTUALE.CONTROVALORE,0) DifferenzaEuro,
0 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.'
--------------------------------------------------------------
--INIZIO INTERVENTI OMNIA QUIII
--WHEN AREA_BISOGNO.ID_AREA = 'LIQ' THEN 'n.c.'
--FINE INTERVENTI OMNIA QUIII
--------------------------------------------------------------
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
0 somma_controvalAttuale,
0 somma_controvalModello,
0.00 AS somma_percentualeAttuale,
0.00 AS somma_percentualeModello,
RISCHIOTOTALE.VAR_PERC_PTF var_tot,
null var_totString,
RISCHIOTOTALE_PIR.VAR_PERC_PTF var_tot_pir,
CASE
--V SOLO CC -> VAR = 0
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.'
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
C6MartPeriodicoImmobiliare.AREA_BISOGNO
LEFT JOIN
#PIRAMIDE_VERT ATTUALE
ON
ATTUALE.ID_AREA = AREA_BISOGNO.ID_AREA
LEFT JOIN
C6MartPeriodicoImmobiliare.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'
WHEN ATTUALE.ID_AREA = 'Self'
THEN 'COMPLESSIVO|BF|SELF'
END
)
LEFT JOIN
C6MartPeriodicoImmobiliare.RISCHIO_AGGREGATO RISCHIOTOTALE
ON
RISCHIOTOTALE.RETE = ATTUALE.RETE
AND RISCHIOTOTALE.COD_FISCALE = ATTUALE.COD_FISCALE
AND RISCHIOTOTALE.COD_AGGREG = 'COMPLESSIVO|BF'
--V
LEFT JOIN
C6MartPeriodicoImmobiliare.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
C6MartPeriodicoImmobiliare.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*/
WHERE AREA_BISOGNO.ID_AREA <> 'self'
------------------------------------------------------------------
SELECT rete, cod_fiscale,sum(ATTUALE.CONTROVALORE) TotControvalore
into #temp
FROM #PIRAMIDE_VERT ATTUALE
WHERE ID_AREA not in ('Na', 'Cc','Self')
group by rete,cod_fiscale
update s157
set s157.PercentualeAttuale =CASE
WHEN vert.TotControvalore = 0 THEN 0
ELSE (100 * s157.PercentualeAttuale / ISNULL(vert.TotControvalore,1))
END,
s157.ControvaloreModello=ROUND(ISNULL(s157.ControvaloreModello * vert.TotControvalore / 100 , 0),2) ,
s157.DifferenzaEuro = ROUND(ISNULL(s157.DifferenzaEuro,0),2) - ROUND(ISNULL(s157.Totale_Percentuale * vert.TotControvalore / 100 , 0),2),
s157.DifferenzaPercentuale = CASE
WHEN vert.TotControvalore = 0 THEN - s157.Totale_Percentuale
ELSE ISNULL( (100 * ISNULL(s157.ControvaloreAttuale,0) / vert.TotControvalore - s157.Totale_Percentuale) , 0)
END ,
s157.somma_controvalAttuale =vert.TotControvalore,
s157.somma_controvalModello=vert.TotControvalore
from C6MartPeriodicoImmobiliare.TB_S133_S157DatiPiramide s157
inner join #temp vert
on vert.rete = s157.rete and vert.cod_fiscale = s157.codicefiscale
select rete,cod_fiscale,'TOT' as Tipo,count(*) over ( partition by rete,cod_fiscale) TOT
into #TempContatori
FROM C6MartPeriodicoImmobiliare.PATRIMONIO_BF
union
select rete,cod_fiscale,'TOTCCSELF',count(*) over ( partition by rete,cod_fiscale) TOTCCSELF
FROM C6MartPeriodicoImmobiliare.PATRIMONIO_BF
where TIPO_PRODOTTO = 'CC' OR ISIN in ('EURO00000009','EURO10000007')
union
select rete,cod_fiscale,'TOTSELF',count(*) over ( partition by rete,cod_fiscale) TOTSELF
FROM C6MartPeriodicoImmobiliare.PATRIMONIO_BF
where ISIN in ('EURO00000009','EURO10000007')
union
select rete,cod_fiscale,'TOTSELFLIQ',count(*) over ( partition by rete,cod_fiscale) TOTSELFLIQ
FROM C6MartPeriodicoImmobiliare.PATRIMONIO_BF
where ISIN in ('EURO00000009','EURO10000007') AND ID_AREA = 'LIQ'
union
select rete,cod_fiscale,'TOTLIQ',count(*) over ( partition by rete,cod_fiscale) TOTLIQ
FROM C6MartPeriodicoImmobiliare.PATRIMONIO_BF
where ID_AREA = 'LIQ'
select
totale1.rete,
totale1.cod_fiscale,
ISNULL(totale1.TOT,0) as TOT,
ISNULL(totale2.TOT,0) as TOTCCSELF,
ISNULL(totale3.TOT,0) as TOTSELF,
ISNULL(totale4.TOT,0) as TOTSELFLIQ,
ISNULL(totale5.TOT,0) as TOTLIQ
into #Contatori
from
(select rete,cod_fiscale,TOT from #TempContatori
where tipo = 'TOT') as totale1
left join
(select rete,cod_fiscale,TOT from #TempContatori
where tipo = 'TOTCCSELF') as totale2
on totale1.rete=totale2.rete
and totale1.cod_fiscale=totale2.cod_fiscale
left join
(select rete,cod_fiscale,TOT from #TempContatori
where tipo = 'TOTSELF') as totale3
on totale1.rete=totale3.rete
and totale1.cod_fiscale=totale3.cod_fiscale
left join
(select rete,cod_fiscale,TOT from #TempContatori
where tipo = 'TOTSELFLIQ') as totale4
on totale1.rete=totale4.rete
and totale1.cod_fiscale=totale4.cod_fiscale
left join
(select rete,cod_fiscale,TOT from #TempContatori
where tipo = 'TOTLIQ') as totale5
on totale1.rete=totale5.rete
and totale1.cod_fiscale=totale5.cod_fiscale
update s157
set
var_needareaString= CASE
WHEN TOTSELFLIQ = TOTLIQ and needarea = 'LIQ' THEN 'n.c.'
ELSE var_needareaString
END,
var_tot = CASE
WHEN TOTCCSELF = TOT THEN 0.00
ELSE var_tot
END ,
var_totString=CASE
WHEN (TOTCCSELF <> TOT) AND(copertura_tot IS NULL OR copertura_tot = 0) THEN 'n.c.'
WHEN (TOTSELF = TOT) THEN 'n.c.'
ELSE NULL
END ,
var_tot_pir =CASE
WHEN TOTCCSELF = TOT THEN 0
ELSE var_tot_pir
END ,
var_tot_pirString=CASE
WHEN var_tot_pirString <> 'n.c.' THEN
CASE
WHEN TOTCCSELF = TOT THEN NULL
WHEN TOTSELF = TOT THEN 'n.c.'
ELSE var_tot_pirString
END
ELSE var_tot_pirString
END ,
VAR_RISFINSTRING=CASE
WHEN VAR_RISFINSTRING <> 'n.c.' THEN
CASE
WHEN TOTCCSELF = TOT THEN NULL
ELSE VAR_RISFINSTRING
END
ELSE VAR_RISFINSTRING
END
from C6MartPeriodicoImmobiliare.TB_S133_S157DatiPiramide s157
inner join ( select * from #Contatori ) contatori
on contatori.rete = s157.rete and contatori.cod_fiscale = s157.codicefiscale
--and codicefiscale='00247580970'
Drop TABLE #temp
DROP TABLE #PIRAMIDE_VERT
drop table #Contatori
drop table #TempContatori
END