[firebase-br] RES: RES: SQL Join com três tabelas

Eduardo Pombo eduardo em embras.net
Seg Set 13 15:53:13 -03 2010


isso ja deve melhorar pelo menos.


Select
 PRO.CDPRO,
 LAN.GRADE,
 L.QUANT as QNTULTCOM,
 PRO.CDGRD,
 PRO.NMPRO,
 PRO.CDUND,
 PROC.SALDO,
 PRO.PONTO,
 PRO.QTMAX,
 PRO.LOCAL,
 sum(lan.quant * pro.vldia) vlcompras,
 Sum(LAN.VALOR * LAN.QUANT * (1 - (FAT.VALDE / FAT.VALNO))) VALOR,
 Sum(LAN.QUANT) QUANT,
 Sum(LAN.QUANT * PRO.QTMAX) PESOBRUTO, MAX(FAT.DTEMI) ULTVENDA,
 Sum(LAN.QUANT *
 LAN.PRECU) VLPRECU
>From IN01LAN LAN
  Left Join IN01PRO PRO on PRO.CDPRO = LAN.CDPRO
  Left Join IN01FAT FAT on FAT.FATUR = LAN.NOTFI
  Left Join IN01CLI CLI on CLI.CDCLI = FAT.CDCLI
  Left join IN01LAN L   on L.CDPRO   = LAN.CDPRO and l.notfi = (select
first 1 la.notfi from in01lan la where not la.cdfrn is null and
la.cdpro = lan.cdpro order by la.dtemi desc),
SP_GETSALDOGRADE(PRO.CDPRO, LAN.GRADE) PROC
Where (FAT.VALNO > 0)
  and (lan.venda in ('V','P'))
  and (lan.dtpro >= '10.09.2010')
  and (lan.dtpro <= '10.09.2010')
Group by
  PRO.CDPRO,
  LAN.GRADE,
  L.QUANT,
  PRO.CDGRD,
  PRO.NMPRO,
  PRO.CDUND,
  SALDO,
  PRO.PONTO,
  PRO.QTMAX,
  PRO.LOCAL
order by pro.nmpro


2010/9/13 Levy Moreira <levymoreira.ce em gmail.com>:
> O select completo é esse:
>
> Select PRO.CDPRO, LAN.GRADE, L.QUANT as QNTULTCOM, PRO.CDGRD, PRO.NMPRO,
> PRO.CDUND,
>  PROC.SALDO, PRO.PONTO, PRO.QTMAX, PRO.LOCAL,
> sum(lan.quant * pro.vldia) vlcompras,
> Sum(LAN.VALOR * LAN.QUANT * (1 - (FAT.VALDE / FAT.VALNO))) VALOR,
> Sum(LAN.QUANT) QUANT,
>  Sum(LAN.QUANT * PRO.QTMAX) PESOBRUTO, MAX(FAT.DTEMI) ULTVENDA,
> Sum(LAN.QUANT *
>  LAN.PRECU) VLPRECU
> From IN01LAN LAN  Left Join IN01PRO PRO on PRO.CDPRO = LAN.CDPRO     Left
> Join IN01FAT FAT on
> FAT.FATUR = LAN.NOTFI     Left Join IN01CLI CLI on CLI.CDCLI =
> FAT.CDCLI      Left join IN01LAN L   on
>  L.CDPRO   = LAN.CDPRO,     SP_GETSALDOGRADE(PRO.CDPRO, LAN.GRADE) PROC
> Where (FAT.VALNO > 0)
> and l.notfi = (select first 1 la.notfi from in01lan la where not la.cdfrn is
> null and la.cdpro = lan.cdpro order
> by la.dtemi desc)
> and (lan.venda in ('V','P')) and (lan.dtpro >= '10.09.2010') and (lan.dtpro
> <= '10.09.2010')
> Group by PRO.CDPRO, LAN.GRADE, L.QUANT, PRO.CDGRD, PRO.NMPRO, PRO.CDUND,
> SALDO, PRO.PONTO, PRO.QTMAX, PRO.LOCAL
> order by pro.nmpro
>
> se eu comentar esta linha percebi que fica rapido
> and l.notfi = (select first 1 la.notfi from in01lan la where not la.cdfrn is
> null and la.cdpro = lan.cdpro order
> by la.dtemi desc)
>
>
> e agora?
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



-- 

Atenciosamente

José Eduardo Pombo de Barros
Gerente de Manutenção de Sistemas




Mais detalhes sobre a lista de discussão lista