-- Aggiunta GESTIONE EligoTitoli L192 (FCianfa, 26/11/2014) CREATE procedure [c6mart].[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 C6Mart.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 C6MART.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 c6mart.TB_S133_S157DatiPiramide insert into c6mart.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 c6mart.AREA_BISOGNO LEFT JOIN #PIRAMIDE_VERT ATTUALE ON ATTUALE.ID_AREA = AREA_BISOGNO.ID_AREA LEFT JOIN c6mart.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 c6mart.RISCHIO_AGGREGATO RISCHIOTOTALE ON RISCHIOTOTALE.RETE = ATTUALE.RETE AND RISCHIOTOTALE.COD_FISCALE = ATTUALE.COD_FISCALE AND RISCHIOTOTALE.COD_AGGREG = 'COMPLESSIVO|BF' --V LEFT JOIN c6mart.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 c6mart.RISCHIO_AGGREGATO RISCHIORISFIN ON RISCHIORISFIN.RETE = ATTUALE.RETE AND RISCHIORISFIN.COD_FISCALE = ATTUALE.COD_FISCALE AND RISCHIORISFIN.COD_AGGREG = 'RISFIN|PIRAMIDE' --Per Aladdin è stato aggiunto il tag |PIRAMIDE -- /*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 c6mart.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 c6mart.PATRIMONIO_BF union select rete,cod_fiscale,'TOTCCSELF',count(*) over ( partition by rete,cod_fiscale) TOTCCSELF FROM c6mart.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 c6mart.PATRIMONIO_BF where ISIN in ('EURO00000009','EURO10000007') union select rete,cod_fiscale,'TOTSELFLIQ',count(*) over ( partition by rete,cod_fiscale) TOTSELFLIQ FROM c6mart.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 c6mart.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 c6mart.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