﻿-- =============================================
-- Author:		<Alessandro Tringali>
-- Create date: <25052010>
-- Description:	< SEZIONE 103>
-- =============================================
--EXEC [C6Mart].[PL_D_S168TabellaEmittenti]  'F','FF@7181'
CREATE procedure [C6Mart].[PL_D2_S168TabellaEmittenti]
	-- Add the parameters for the stored procedure here
	@Rete char(1), 
	@CodiceFiscale varchar(16)
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
declare @patr_compl decimal(18,3)
select @patr_compl=sum(ctv_prodotto) from 
C6Mart.patrimonio_emittenti 
where  cod_fiscale =@codicefiscale
and rete=@rete
and ctv_prodotto > 0
SELECT 
		COD_FISCALE,
		RETE,
		RATING_AAA,
		RATING_AAp,
		RATING_AA,
		RATING_AAm,
		RATING_Ap,
		RATING_A,
		RATING_Am,
		RATING_BBBp,
		RATING_BBB,
		RATING_BBBm,
		RATING_BBp,
		RATING_BB,
		RATING_BBm,
		RATING_Bp,
		RATING_B,
		RATING_Bm,
		RATING_CCCp,
		RATING_CCC,
		RATING_CCCm,
		RATING_CC,
		RATING_C,
		RATING_D,
		RATING_na,
		FLG_RISKCLASS1,
		FLG_RISKCLASS2,
		FLG_RISKCLASS3,
		FLG_RISKCLASS4,
		FLG_RISKCLASS5,
		FLG_RISKCLASS6,
		FLG_RISKCLASS7,
		FLG_RISKCLASS8,
		FLG_RISKCLASS9,
		FLG_RISKCLASS10,
		INTERMEDIARIO,
		ISSUER,
		STOCKSCounterValue,
		bondsCounterValue,
		CONCENTRATION_ISSUER,
		CONCENTRATION,
		NC
--isnull(RATING,'n.a.') as RATING
FROM
(
-- PER INTERMEDIARIO 
    SELECT
			COD_FISCALE,
			RETE,
			MAX(RATING_AAA) AS RATING_AAA,
			MAX(RATING_AAp) AS RATING_AAp,
			MAX(RATING_AA) AS RATING_AA,
			MAX(RATING_AAm) AS RATING_AAm,
			MAX(RATING_Ap) AS RATING_Ap,
			MAX(RATING_A) AS RATING_A,
			MAX(RATING_Am) AS RATING_Am,
			MAX(RATING_BBBp) AS RATING_BBBp,
			MAX(RATING_BBB) AS RATING_BBB,
			MAX(RATING_BBBm) AS RATING_BBBm,
			MAX(RATING_BBp) AS RATING_BBp,
			MAX(RATING_BB) AS RATING_BB,
			MAX(RATING_BBm) AS RATING_BBm,
			MAX(RATING_Bp) AS RATING_Bp,
			MAX(RATING_B) AS RATING_B,
			MAX(RATING_Bm) AS RATING_Bm,
			MAX(RATING_CCCp) AS RATING_CCCp,
			MAX(RATING_CCC) AS RATING_CCC,
			MAX(RATING_CCCm) AS RATING_CCCm,
			MAX(RATING_CC) AS RATING_CC,
			MAX(RATING_C) AS RATING_C,
			MAX(RATING_D) AS RATING_D,
			MAX(RATING_na) AS RATING_na,
			MAX(FLG_RISKCLASS1) AS FLG_RISKCLASS1,
			MAX(FLG_RISKCLASS2) AS FLG_RISKCLASS2,
			MAX(FLG_RISKCLASS3) AS FLG_RISKCLASS3,
			MAX(FLG_RISKCLASS4) AS FLG_RISKCLASS4,
			MAX(FLG_RISKCLASS5) AS FLG_RISKCLASS5,
			MAX(FLG_RISKCLASS6) AS FLG_RISKCLASS6,
			MAX(FLG_RISKCLASS7) AS FLG_RISKCLASS7,
			MAX(FLG_RISKCLASS8) AS FLG_RISKCLASS8,
			MAX(FLG_RISKCLASS9) AS FLG_RISKCLASS9,
			MAX(FLG_RISKCLASS10) AS FLG_RISKCLASS10,
			--V nel caso sia null è BF???
			isnull(INTERMEDIARIO,'BF') AS INTERMEDIARIO,
			EMITTENTE AS ISSUER,
			SUM(STOCKSCounterValue) AS  STOCKSCounterValue,
			sum(bondsCounterValue) AS bondsCounterValue,
			0 as  CONCENTRATION_ISSUER ,
			--V normalizzo la percentuale per essere rappresentato sul report
			MAX(CONCENTRATION)* 100 AS CONCENTRATION,
			sum(case when copertura > 0 then 0 else 1 end) as nc
			--RATING as RATING
				FROM
				(
					SELECT      V.COD_FISCALE,
								V.RETE,
								INTERMEDIARIO,
								CREDITRISKCLASS,
								EMITTENTE,
								CASE WHEN RATING = 'AAA' THEN 1 ELSE 0 END AS RATING_AAA,
								CASE WHEN RATING = 'AA+' THEN 1 ELSE 0 END AS RATING_AAp,
								CASE WHEN RATING = 'AA' THEN 1 ELSE 0 END AS RATING_AA,
								CASE WHEN RATING = 'AA-' THEN 1 ELSE 0 END AS RATING_AAm,
								CASE WHEN RATING = 'A+' THEN 1 ELSE 0 END AS RATING_Ap,
								CASE WHEN RATING = 'A' THEN 1 ELSE 0 END AS RATING_A,
								CASE WHEN RATING = 'A-' THEN 1 ELSE 0 END AS RATING_Am,
								CASE WHEN RATING = 'BBB+' THEN 1 ELSE 0 END AS RATING_BBBp,
								CASE WHEN RATING = 'BBB' THEN 1 ELSE 0 END AS RATING_BBB,
								CASE WHEN RATING = 'BBB-' THEN 1 ELSE 0 END AS RATING_BBBm,
								CASE WHEN RATING = 'BB+' THEN 1 ELSE 0 END AS RATING_BBp,
								CASE WHEN RATING = 'BB' THEN 1 ELSE 0 END AS RATING_BB,
								CASE WHEN RATING = 'BB-' THEN 1 ELSE 0 END AS RATING_BBm,
								CASE WHEN RATING = 'B+' THEN 1 ELSE 0 END AS RATING_Bp,
								CASE WHEN RATING = 'B' THEN 1 ELSE 0 END AS RATING_B,
								CASE WHEN RATING = 'B-' THEN 1 ELSE 0 END AS RATING_Bm,
								CASE WHEN RATING = 'CCC+' THEN 1 ELSE 0 END AS RATING_CCCp,
								CASE WHEN RATING = 'CCC' THEN 1 ELSE 0 END AS RATING_CCC,
								CASE WHEN RATING = 'CCC-' THEN 1 ELSE 0 END AS RATING_CCCm,
								CASE WHEN RATING = 'CC' THEN 1 ELSE 0 END AS RATING_CC,
								CASE WHEN RATING = 'C' THEN 1 ELSE 0 END AS RATING_C,
								CASE WHEN RATING = 'D' THEN 1 ELSE 0 END AS RATING_D,
								CASE WHEN RATING is null THEN 1 ELSE 0 END AS RATING_na, 
								CASE WHEN CREDITRISKCLASS ='Rischio 1/10' THEN 1 ELSE 0 END AS FLG_RISKCLASS1,
								CASE WHEN CREDITRISKCLASS ='Rischio 2/10' THEN 1 ELSE 0 END AS FLG_RISKCLASS2,
								CASE WHEN CREDITRISKCLASS ='Rischio 3/10' THEN 1 ELSE 0 END AS FLG_RISKCLASS3,
								CASE WHEN CREDITRISKCLASS ='Rischio 4/10' THEN 1 ELSE 0 END AS FLG_RISKCLASS4,
								CASE WHEN CREDITRISKCLASS ='Rischio 5/10' THEN 1 ELSE 0 END AS FLG_RISKCLASS5,
								CASE WHEN CREDITRISKCLASS ='Rischio 6/10' THEN 1 ELSE 0 END AS FLG_RISKCLASS6,
								CASE WHEN CREDITRISKCLASS ='Rischio 7/10' THEN 1 ELSE 0 END AS FLG_RISKCLASS7,
								CASE WHEN CREDITRISKCLASS ='Rischio 8/10' THEN 1 ELSE 0 END AS FLG_RISKCLASS8,
								CASE WHEN CREDITRISKCLASS ='Rischio 9/10' THEN 1 ELSE 0 END AS FLG_RISKCLASS9,
								CASE WHEN CREDITRISKCLASS ='Rischio 10/10' THEN 1 ELSE 0 END AS FLG_RISKCLASS10,
								SUM(CTV_AZ_OB_EMIT) as CTV_AZ_OB_EMIT,
								SUM(CTV_PRODOTTO) AS CTV_PRODOTTO,
								sum(CTV_AZIONARIO) AS STOCKSCounterValue,
								sum(CTV_OBBLIGAZIONARIO) AS bondsCounterValue,
								0 AS  CONCENTRATION_ISSUER ,
								--SUM(CTV_AZ_OB_EMIT_INTER)/SUM(CTV_COMPL_NOCC_NEG)  AS CONCENTRATION, --modifica apportata il 24/04 per concentrazione % errata secondo Levi
								SUM(CTV_AZ_OB_EMIT_INTER)/SUM(CTV_COMPLESSIVO)  AS CONCENTRATION,
								sum(copertura) as copertura
								--RATING as RATING
				 FROM  C6Mart.PATRIMONIO_EMITTENTI V  
				LEFT JOIN C6Mart.ANAG_PRODOTTI ANAG
					   ON V.COD_PRODOTTO = ANAG.COD_PRODOTTO
				 WHERE 
				 1=1
				   AND V.COD_FISCALE = @CODICEFISCALE
				   AND V.RETE = @RETE
				   AND (CTV_AZIONARIO >0 OR CTV_OBBLIGAZIONARIO > 0)
				GROUP BY
				 V.COD_FISCALE,
				 V.RETE,
				 INTERMEDIARIO,
				 EMITTENTE,
				 CREDITRISKCLASS,
				  RATING
				) Y
GROUP BY 
     COD_FISCALE,
     RETE,
     INTERMEDIARIO,
     EMITTENTE 
--RATING
--V devo rappresentare solo le 3 principali me le ordine e nel codice scorro per le prime 3 dopo aver filtrato per intermediario
--ORDER BY CONCENTRATION DESC
UNION 
--COMPLESSIVO
   SELECT
   COD_FISCALE,
			RETE,
        MAX(RATING_AAA) AS RATING_AAA,
		MAX(RATING_AAp) AS RATING_AAp,
		MAX(RATING_AA) AS RATING_AA,
		MAX(RATING_AAm) AS RATING_AAm,
		MAX(RATING_Ap) AS RATING_Ap,
		MAX(RATING_A) AS RATING_A,
		MAX(RATING_Am) AS RATING_Am,
		MAX(RATING_BBBp) AS RATING_BBBp,
		MAX(RATING_BBB) AS RATING_BBB,
		MAX(RATING_BBBm) AS RATING_BBBm,
		MAX(RATING_BBp) AS RATING_BBp,
		MAX(RATING_BB) AS RATING_BB,
		MAX(RATING_BBm) AS RATING_BBm,
		MAX(RATING_Bp) AS RATING_Bp,
		MAX(RATING_B) AS RATING_B,
		MAX(RATING_Bm) AS RATING_Bm,
		MAX(RATING_CCCp) AS RATING_CCCp,
		MAX(RATING_CCC) AS RATING_CCC,
		MAX(RATING_CCCm) AS RATING_CCCm,
		MAX(RATING_CC) AS RATING_CC,
		MAX(RATING_C) AS RATING_C,
		MAX(RATING_D) AS RATING_D,
		MAX(RATING_na) AS RATING_na,
     MAX(FLG_RISKCLASS1) AS FLG_RISKCLASS1,
     MAX(FLG_RISKCLASS2) AS FLG_RISKCLASS2,
     MAX(FLG_RISKCLASS3) AS FLG_RISKCLASS3,
     MAX(FLG_RISKCLASS4) AS FLG_RISKCLASS4,
	MAX(FLG_RISKCLASS5) AS FLG_RISKCLASS5,
	MAX(FLG_RISKCLASS6) AS FLG_RISKCLASS6,
	MAX(FLG_RISKCLASS7) AS FLG_RISKCLASS7,
	MAX(FLG_RISKCLASS8) AS FLG_RISKCLASS8,
	MAX(FLG_RISKCLASS9) AS FLG_RISKCLASS9,
	MAX(FLG_RISKCLASS10) AS FLG_RISKCLASS10,
	 isnull(INTERMEDIARIO,'BF') AS INTERMEDIARIO,
     EMITTENTE AS ISSUER,
     SUM(STOCKSCounterValue) AS  STOCKSCounterValue,
     SUM(bondsCounterValue) AS bondsCounterValue,
     SUM(isnull(bondsCounterValue,0)+ isnull(STOCKSCounterValue,0))/ max(@patr_compl)  *100  CONCENTRATION_ISSUER ,
     0 AS CONCENTRATION,
	sum(case when copertura > 0 then 0 else 1 end) as nc
--RATING as RATING
FROM
(
SELECT 
COD_FISCALE,
RETE,
'COMPLESSIVO' as INTERMEDIARIO,
CREDITRISKCLASS,
EMITTENTE,
RATING_AAA,
RATING_AAp,
RATING_AA,
RATING_AAm,
RATING_Ap,
RATING_A,
RATING_Am,
RATING_BBBp,
RATING_BBB,
RATING_BBBm,
RATING_BBp,
RATING_BB,
RATING_BBm,
RATING_Bp,
RATING_B,
RATING_Bm,
RATING_CCCp,
RATING_CCC,
RATING_CCCm,
RATING_CC,
RATING_C,
RATING_D,
RATING_na,
FLG_RISKCLASS1,
FLG_RISKCLASS2,
FLG_RISKCLASS3,
FLG_RISKCLASS4,
FLG_RISKCLASS5,
FLG_RISKCLASS6,
FLG_RISKCLASS7,
FLG_RISKCLASS8,
FLG_RISKCLASS9,
FLG_RISKCLASS10,
SUM(CTV_AZ_OB_EMIT) CTV_AZ_OB_EMIT,
SUM(STOCKSCounterValue) AS STOCKSCounterValue,
SUM(bondsCounterValue) AS bondsCounterValue,
0 AS CONCENTRATION_ISSUER,
SUM(CTV_AZ_OB_EMIT_INTER)/SUM(CTV_COMPLessivo) TOT ,
SUM(COPERTURA) AS COPERTURA 
--RATING as RATING
FROM
(
SELECT     V.COD_FISCALE,
                V.RETE,
                'COMPLESSIVO' as INTERMEDIARIO,
                CREDITRISKCLASS,
                EMITTENTE,
                 CASE WHEN RATING = 'AAA' THEN 1 ELSE 0 END AS RATING_AAA,
					CASE WHEN RATING = 'AA+' THEN 1 ELSE 0 END AS RATING_AAp,
					CASE WHEN RATING = 'AA' THEN 1 ELSE 0 END AS RATING_AA,
					CASE WHEN RATING = 'AA-' THEN 1 ELSE 0 END AS RATING_AAm,
					CASE WHEN RATING = 'A+' THEN 1 ELSE 0 END AS RATING_Ap,
					CASE WHEN RATING = 'A' THEN 1 ELSE 0 END AS RATING_A,
					CASE WHEN RATING = 'A-' THEN 1 ELSE 0 END AS RATING_Am,
					CASE WHEN RATING = 'BBB+' THEN 1 ELSE 0 END AS RATING_BBBp,
					CASE WHEN RATING = 'BBB' THEN 1 ELSE 0 END AS RATING_BBB,
					CASE WHEN RATING = 'BBB-' THEN 1 ELSE 0 END AS RATING_BBBm,
					CASE WHEN RATING = 'BB+' THEN 1 ELSE 0 END AS RATING_BBp,
					CASE WHEN RATING = 'BB' THEN 1 ELSE 0 END AS RATING_BB,
					CASE WHEN RATING = 'BB-' THEN 1 ELSE 0 END AS RATING_BBm,
					CASE WHEN RATING = 'B+' THEN 1 ELSE 0 END AS RATING_Bp,
					CASE WHEN RATING = 'B' THEN 1 ELSE 0 END AS RATING_B,
					CASE WHEN RATING = 'B-' THEN 1 ELSE 0 END AS RATING_Bm,
					CASE WHEN RATING = 'CCC+' THEN 1 ELSE 0 END AS RATING_CCCp,
					CASE WHEN RATING = 'CCC' THEN 1 ELSE 0 END AS RATING_CCC,
					CASE WHEN RATING = 'CCC-' THEN 1 ELSE 0 END AS RATING_CCCm,
					CASE WHEN RATING = 'CC' THEN 1 ELSE 0 END AS RATING_CC,
					CASE WHEN RATING = 'C' THEN 1 ELSE 0 END AS RATING_C,
					CASE WHEN RATING = 'D' THEN 1 ELSE 0 END AS RATING_D,
					CASE WHEN RATING is null THEN 1 ELSE 0 END AS RATING_na, 
				CASE WHEN CREDITRISKCLASS ='Rischio 1/10' THEN 1 ELSE 0 END AS FLG_RISKCLASS1,
				CASE WHEN CREDITRISKCLASS ='Rischio 2/10' THEN 1 ELSE 0 END AS FLG_RISKCLASS2,
				CASE WHEN CREDITRISKCLASS ='Rischio 3/10' THEN 1 ELSE 0 END AS FLG_RISKCLASS3,
				CASE WHEN CREDITRISKCLASS ='Rischio 4/10' THEN 1 ELSE 0 END AS FLG_RISKCLASS4,
				CASE WHEN CREDITRISKCLASS ='Rischio 5/10' THEN 1 ELSE 0 END AS FLG_RISKCLASS5,
				CASE WHEN CREDITRISKCLASS ='Rischio 6/10' THEN 1 ELSE 0 END AS FLG_RISKCLASS6,
				CASE WHEN CREDITRISKCLASS ='Rischio 7/10' THEN 1 ELSE 0 END AS FLG_RISKCLASS7,
				CASE WHEN CREDITRISKCLASS ='Rischio 8/10' THEN 1 ELSE 0 END AS FLG_RISKCLASS8,
				CASE WHEN CREDITRISKCLASS ='Rischio 9/10' THEN 1 ELSE 0 END AS FLG_RISKCLASS9,
				CASE WHEN CREDITRISKCLASS ='Rischio 10/10' THEN 1 ELSE 0 END AS FLG_RISKCLASS10,
                SUM(CTV_AZ_OB_EMIT) as CTV_AZ_OB_EMIT,
                SUM(CTV_AZIONARIO) AS STOCKSCounterValue,
                sum(CTV_OBBLIGAZIONARIO) AS bondsCounterValue,
                0 AS  CONCENTRATION_ISSUER ,
                SUM(CTV_AZ_OB_EMIT_INTER) CTV_AZ_OB_EMIT_INTER,
                SUM(CTV_COMPLessivo)  AS CTV_COMPLessivo,
                MAX(copertura) as copertura
				--RATING as RATING
 FROM  C6Mart.PATRIMONIO_EMITTENTI V 
LEFT JOIN C6Mart.ANAG_PRODOTTI ANAG
	   ON V.COD_PRODOTTO = ANAG.COD_PRODOTTO 
 WHERE 
 1=1
   AND V.COD_FISCALE = @CODICEFISCALE
   AND V.RETE = @RETE
   AND (CTV_AZIONARIO >0 OR CTV_OBBLIGAZIONARIO > 0)
GROUP BY
 V.COD_FISCALE,
 V.RETE,
 EMITTENTE,
 INTERMEDIARIO,
 CREDITRISKCLASS,
RATING
) Y
GROUP BY 
COD_FISCALE,
RETE,
INTERMEDIARIO,
CREDITRISKCLASS,
EMITTENTE,
	RATING_AAA,
RATING_AAp,
RATING_AA,
RATING_AAm,
RATING_Ap,
RATING_A,
RATING_Am,
RATING_BBBp,
RATING_BBB,
RATING_BBBm,
RATING_BBp,
RATING_BB,
RATING_BBm,
RATING_Bp,
RATING_B,
RATING_Bm,
RATING_CCCp,
RATING_CCC,
RATING_CCCm,
RATING_CC,
RATING_C,
RATING_D,
RATING_na,
FLG_RISKCLASS1,
FLG_RISKCLASS2,
FLG_RISKCLASS3,
FLG_RISKCLASS4,
FLG_RISKCLASS5,
FLG_RISKCLASS6,
FLG_RISKCLASS7,
FLG_RISKCLASS8,
FLG_RISKCLASS9,
FLG_RISKCLASS10
--RATING
) L
GROUP BY 
     COD_FISCALE,
     RETE,
     INTERMEDIARIO,
     EMITTENTE 
--RATING
--V devo rappresentare solo le 3 principali me le ordine e nel codice scorro per le prime 3 dopo aver filtrato per intermediario
--ORDER BY CONCENTRATION DESC
) U
ORDER BY CONCENTRATION DESC , CONCENTRATION_ISSUER DESC 
END