Ver Mensaje Individual
  #4 (permalink)  
Antiguo 22/03/2017, 17:00
Avatar de Libras
Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 1 mes
Puntos: 774
Respuesta: Optimizar query

Sip te podria orientar, para empezar eso que estas haciendo esta muy mal, no tienes porque hacer 2 queries para sacar un sum y un count, y mucho menos poner un subquery en cada columna

por ejemplo:

Esto:
Código SQL:
Ver original
  1. (SELECT isnull(SUM(P1.Monto),0) FROM Finanzas.PagosrecibidosCheque P1 INNER JOIN
  2. Finanzas.PagosRecibidosHeader PR ON PR.IdGuid=P1.IdGuidHeader WHERE  CONVERT(DATE, P1.Fecha , 103) BETWEEN @pFechaDel AND @pFechaAl AND  
  3. PR.IdGuidCliente IN (@IdGuids) AND IsNull(PR.PagoCancelado,0)=0)AS Cheques,
  4. (SELECT isnull(COUNT(P1.Monto),0) FROM Finanzas.PagosrecibidosCheque P1 INNER JOIN
  5. Finanzas.PagosRecibidosHeader PR ON PR.IdGuid=P1.IdGuidHeader WHERE  CONVERT(DATE, P1.Fecha , 103) BETWEEN @pFechaDel AND @pFechaAl AND  
  6. PR.IdGuidCliente IN (@IdGuids) AND IsNull(PR.PagoCancelado,0)=0)AS CountCheques,

Puede quedar en esto:

Código SQL:
Ver original
  1. SELECT isnull(SUM(P1.Monto),0) cheques, isnull(COUNT(p1.monto),0) countcheques  FROM Finanzas.PagosrecibidosCheque P1 INNER JOIN
  2. Finanzas.PagosRecibidosHeader PR ON PR.IdGuid=P1.IdGuidHeader WHERE  CONVERT(DATE, P1.Fecha , 103) BETWEEN @pFechaDel AND @pFechaAl AND  
  3. PR.IdGuidCliente IN (@IdGuids) AND IsNull(PR.PagoCancelado,0)=0

Y asi susecivamente para los demas queries :)

Ahora @idguids, va a recibir mas de un valor? porque estas usando el IN?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me