› Fóruns › SQL e PL/SQL › Como montar essa SQL? › Como montar essa SQL?
Ola FACC,
Sem considerar os indices que vc tem ai.
Olhando por cima, da para dizer que os groups by contidos nas subselects das tuplas podem ser retirados, voce ja esta filtrando por loja, so ira retornar uma loja, nao tem o pq agrupar, isso ja aumentaria a performace.
Outra coisa que pode lhe ajuda eh substituindo:
AND TO_CHAR(DTVENDA, 'MM/YYYY') = '10/2009'
POR
AND DTVENDA BETWEEN TO_DATE('01/10/2009,'DD/MM/YYYY') AND LAST_DAY(TO_DATE('01/10/2009,'DD/MM/YYYY'))
Outra coisa, na parte abaixo, voce esta separando contratos com menos de 9 digitos de com mais de 9 digitos, para depois somar… nao seria melhor nem separar????
(((SELECT SUM(VLRCURSO)
FROM CYBELAR_CRESCABR
WHERE FATURADO = 'S'
AND TO_CHAR(DTVENDA, 'MM/YYYY') = '10/2009'
AND LENGTH(CONTRATO) = 9
AND C.LOJA = LOJA
GROUP BY LOJA)
Ficaria assim:
(((SELECT SUM(VLRCURSO)
FROM CYBELAR_CRESCABR
WHERE FATURADO = 'S'
AND DTVENDA BETWEEN TO_DATE('01/10/2009,'DD/MM/YYYY') AND LAST_DAY(TO_DATE('01/10/2009,'DD/MM/YYYY'))
AND C.LOJA = LOJA )
Tem bastante coisa que pode ser melhorada neste codigo, mas para isso devo entender melhor sua regra e estrutura, essa sao algumas que vi de relance.