Forum Discussion

wcastro's avatar
wcastro
Copper Contributor
May 17, 2022

Rendimiento de script con cross apply o full outer join

Hola, quisiera saber como puedo mejorar el tiempo de respuesta de un script en el cual cruzo datos de multiples tablas (3, 4 tablas) con cross apply o con full outer join

  • olafhelper's avatar
    olafhelper
    Bronze Contributor
    That's to less on information.
    Please post table design as DDL, some sample data as DML statement and the expected result.
    • wcastro's avatar
      wcastro
      Copper Contributor

      Hola olafhelper y toda la comunidad

      Buenas tardes, la consulta que tengo me trae por operación 4 registros. Necesito un solo registro por operación (los que están marcados en color negro)

       

      Este es el script

      ----- consultar

      SELECT

      Q.Ceq11BOpe [Operacion]  -- es la llave

      ,CAST(PM.SALDOACTUAL AS decimal(17, 2)) [Saldo],PM.FECHAADJUDICACION [F Prestamo] 

      ,1 [TipoTasa]

      ,1 [TipoDias]

      ,'P' [TipoAjusteVto]

      ,1 [TipoAño]

      ,CASE WHEN PM.SECUENCIAL = PCC3.SECUENCIALPRESTAMO and max(pcc3.SECUENCIAL) = max(PCCG.SECUENCIALPRESTAMOCOMPCARTERA) THEN 'S' ELSE 'N' END [Md]

      ,null [FechaUltimaRevisionTasa]

      ,1 [codClasifInterna]

      ,CASE WHEN t1.VCI IS NULL THEN 0 ELSE t1.VCI END [Importe2]  --corriente

      ,CASE WHEN pcc2.VALORCOBRADO IS NULL THEN 0 ELSE CAST(pcc2.VALORCOBRADO  AS decimal) END [Importe3]  --mora

      ,CASE WHEN t3.VCC IS NULL THEN 0 ELSE t3.VCC END [Importe4]  --comision

      ,CASE WHEN t2.VCS IS NULL THEN 0 ELSE t2.VCS END [Importe12]  --seguro

      FROM [Intermedia].[dbo].CEQ011 Q

      INNER JOIN FBS_CARTERA.PRESTAMOMAESTRO PM ON Q.Ceq11Id1 = PM.SECUENCIAL

      left JOIN FBS_CARTERA.PRESTAMOTASAINTERES PTI ON PTI.SECUENCIALPRESTAMO = PM.SECUENCIAL And PTI.SECUENCIAL = (SELECT MAX(TI.SECUENCIAL) FROM FBS_CARTERA.PRESTAMOTASAINTERES TI WHERE TI.SECUENCIALPRESTAMO = PM.SECUENCIAL)

      left join Fbs_Cartera.Prestamocomponente_Cartera pcc2 on pm.SECUENCIAL = pcc2.SECUENCIALPRESTAMO AND pcc2.SECUENCIAL = (select max(pccM.secuencial) from Fbs_Cartera.Prestamocomponente_Cartera pccM where pccM.SECUENCIALPRESTAMO = pm.SECUENCIAL)

      left join FBS_NEGOCIOSFINANCIEROS.COMPONENTE cpn on pcc2.SECUENCIALCOMPONENTECARTERA = cpn.SECUENCIAL and cpn.NOMBRE LIKE '%MORA%'

      left join FBS_CARTERA.PRESTAMOCOMPONENTE_CARTERA PCC3 on PM.SECUENCIAL = PCC3.SECUENCIALPRESTAMO AND pcc3.SECUENCIAL = (select max(pccA.secuencial) from Fbs_Cartera.Prestamocomponente_Cartera pccA where pccA.SECUENCIALPRESTAMO = pm.SECUENCIAL and pccA.SECUENCIALCOMPONENTECARTERA in (672, 673))

      left join FBS_CARTERA.PRESTAMOCOMPONENTE_CARTERAPERIODOGRACIA PCCG on PCCG.SECUENCIALPRESTAMOCOMPCARTERA = PCC3.SECUENCIAL

      left join FBS_CARTERA.PRESTAMOCLIENTE pc on pm.SECUENCIAL = pc.SECUENCIALPRESTAMO

      left join FBS_CLIENTES.CLIENTE ct on pc.secuencialcliente = ct.SECUENCIAL

      inner join [Intermedia].[dbo].[MgHm001] FST049 on CAST(ct.ESPREFERENCIAL AS smallint) = FST049.MgHOriN1 and FST049.MgHTbl = 'FST049'

      INNER JOIN FBS_GENERALES.EMPRESA e on e.SECUENCIAL = pm.SECUENCIALEMPRESA

      INNER JOIN FBS_GENERALES.CALENDARIO c on e.SECUENCIAL = c.SECUENCIALEMPRESA and c.FECHASISTEMA = PM.FECHAADJUDICACION

      INNER JOIN FBS_CARTERA.ESTADOPRESTAMO EP ON EP.CODIGO = PM.CODIGOESTADOPRESTAMO

      INNER JOIN [Intermedia].[dbo].[MgHm001] FST026 ON FST026.MgHOriT1 = EP.CODIGO AND FST026.MgHTbl = 'FST026'

               

      cross apply    --full outer join

      --select t1.vci, t2.vcs, t3.vcc from

      (

      select pmi.SECUENCIAL, sum(pccci.VALORCAUSADO) VCI  --pcc.SECUENCIALPRESTAMO, pcc.SECUENCIALCOMPONENTECARTERA

      from FBS_CARTERA.PRESTAMOMAESTRO PMI

      INNER JOIN FBS_CARTERA.PRESTAMOCOMPONENTE_CARTERA PCCI ON PMI.SECUENCIAL = PCCI.SECUENCIALPRESTAMO

      INNER JOIN FBS_CARTERA.PRESTAMOCOMPONTE_CARTERACAUSACION PCCCI ON PCCI.SECUENCIAL = PCCCI.SECUENCIALPRESTAMOCOMPCARTERA

      WHERE PMI.CODIGOESTADOPRESTAMO NOT IN ('G', 'Z') and pmi.SECUENCIAL in (1237797, 1237097, 960605, 744615)

      and pcci.SECUENCIALCOMPONENTECARTERA = 7   --interes

      group by pmi.SECUENCIAL  --pcc.SECUENCIALPRESTAMO  --, pcc.SECUENCIALCOMPONENTECARTERA

      ) t1

       

      full outer join            --outer apply -- crossapply

       

      (

      select pms.SECUENCIAL, sum(pcccs.VALORCAUSADO) VCS   --pcc.SECUENCIALPRESTAMO, pcc.SECUENCIALCOMPONENTECARTERA

      from FBS_CARTERA.PRESTAMOMAESTRO PMS

      INNER JOIN FBS_CARTERA.PRESTAMOCOMPONENTE_CARTERA PCCS ON PMS.SECUENCIAL = PCCS.SECUENCIALPRESTAMO

      INNER JOIN FBS_CARTERA.PRESTAMOCOMPONTE_CARTERACAUSACION PCCCS ON PCCS.SECUENCIAL = PCCCS.SECUENCIALPRESTAMOCOMPCARTERA

      WHERE PMS.CODIGOESTADOPRESTAMO NOT IN ('G', 'Z') and pms.SECUENCIAL in (1237797, 1237097, 960605, 744615)

      and pccs.SECUENCIALCOMPONENTECARTERA = 9   --seguro

      group by pms.SECUENCIAL  -- pcc.SECUENCIALPRESTAMO   --,pcc.SECUENCIALCOMPONENTECARTERA

      ) t2 on t1.SECUENCIAL = t2.SECUENCIAL  -- t1.SECUENCIALPRESTAMO = t2.SECUENCIALPRESTAMO

       

      full outer join  --outer apply -- crossapply

       

      (

      select pmc.secuencial, sum(pcccc.VALORCAUSADO) VCC   --pcc.SECUENCIALPRESTAMO, pcc.SECUENCIALCOMPONENTECARTERA

      from FBS_CARTERA.PRESTAMOMAESTRO PMC

      INNER JOIN FBS_CARTERA.PRESTAMOCOMPONENTE_CARTERA PCCC ON PMC.SECUENCIAL = PCCC.SECUENCIALPRESTAMO

      INNER JOIN FBS_CARTERA.PRESTAMOCOMPONTE_CARTERACAUSACION PCCCC ON PCCC.SECUENCIAL = PCCCC.SECUENCIALPRESTAMOCOMPCARTERA

      WHERE PMC.CODIGOESTADOPRESTAMO NOT IN ('G', 'Z') and pmc.SECUENCIAL in (1237797, 1237097, 960605, 744615)

      and pccc.SECUENCIALCOMPONENTECARTERA = 10   --comision

      group by pmc.SECUENCIAL  -- pcc.SECUENCIALPRESTAMO    --,pcc.SECUENCIALCOMPONENTECARTERA

      ) t3 on t2.SECUENCIAL = t3.SECUENCIAL  -- t2.SECUENCIALPRESTAMO = t3.SECUENCIALPRESTAMO

       

      WHERE Q.Ceq11Cpt = 'CONV'  --'PREA'

      and PM.CODIGOESTADOPRESTAMO NOT IN ('G', 'Z')

      and pm.SECUENCIAL in (1237797, 1237097, 960605, 744615)

      group by Q.Ceq11BOpe

      ,pm.SECUENCIAL, pm.NUMEROPRESTAMO, PM.SALDOACTUAL, PM.FECHAADJUDICACION, PM.FECHAVENCIMIENTO,PTI.TASAINTERES, PM.DEUDAINICIAL, PCC3.SECUENCIAL, PCC3.SECUENCIALPRESTAMO, PCCG.SECUENCIALPRESTAMOCOMPCARTERA, ct.ESPREFERENCIAL

      ,FST026.MgHDesN1, PM.FRECUENCIAPAGO, C.ESHABIL, C.ESFESTIVOCALENDARIO, pcc2.VALORCOBRADO, t1.VCI, t2.VCS, t3.VCC

       

Resources