291 lines
28 KiB
SQL
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 |