› Fóruns › SQL e PL/SQL › SQL com muitos joins › SQL com muitos joins
Olá, segue o SQL, este SQL não dá o problema pois foi tirado um ou dois left e fiz outro pequeno select.
SELECT
— DADOS DA NF
CASE
WHEN ASCII(NFCFG.ENTRADASAIDA) = 83 THEN 1
WHEN ASCII(NFCFG.ENTRADASAIDA) = 69 THEN 2
END AS ENTSAI,
NFCFG.DESCRICAO AS DESCNFCFG,
NFCFG.CASASDECUNIT, NFCFG.CASASDECUNITDANFE,
NFCFG.IMPDESCTOSEP, NFCFG.IMPRECIBFIX,
NFCFG.GRUPOFAMILIAR,
NFCFG.ENTRADASAIDA,
NFCFG.NATUREZADAOPERACAO,
NFCAB.EMITENFE AS TIPOEMISSAO,
NFCAB.ESTAB AS EMPRESA,
NFCAB.ESTAB, NFCAB.SEQNOTA,
–O campo ESTAB_SEQNOTA é utilizado para quebra de grupos no ReportBuilder
NFCAB.ESTAB || CHR(45) || NFCAB.SEQNOTA AS ESTAB_SEQNOTA,
NFCAB.SERIE || CHR(45) || NFCAB.NOTA AS NRONF,
NFCAB.CHAVEACESSONFE,
NFCAB.SERIE,
NFCAB.NOTA AS NUMERO,
NFCAB.NPROTAUTORIZA,
NFCAB.DTAUTORIZANFE,
NFCAB.VLRIMPNFANT,
NFCAB.SAFRA AS SAFRA_CAB,
CFOP.NOME AS DESCCFOP,
CONFDANFE.REFCOMP AS CONFDANFE_REFCOMP,
CONFDANFE.IMPLOTE AS CONFDANFE_IMPLOTE,
CONFDANFE.LOGO AS CONFDANFE_LOGO,
CONFDANFE.IMPENDEMIT AS CONFDANFE_IMPENDEMIT,
CONFDANFE.NATOPER AS CONFDANFE_NATOPER,
CONFDANFE.VALORTOTAL AS CONFDANFE_VALORTOTAL,
CONFDANFE.IMPPH AS CONFDANFE_IMPPH,
CONFDANFE.IMPSAFRA AS CONFDANFE_IMPSAFRA,
CONFDANFE.MSGCONTRATO AS CONFDANFE_MSGCONTRATO,
CONFDANFE.VLRTOTPROD AS CONFDANFE_VLRTOTPROD,
CONFDANFE.DOCPEND,
CONFDANFE.IMPLGLOTE,
CONFDANFE.IMPLGVALIDADE,
CONFDANFE.IMPLGFABRICANTE,
CONFDANFE.IMPLGREGISTROFAB,
CONFDANFE.IMPLGQUANTIDADE,
CONFDANFE.IMPLGPESO,
CONFDANFE.IMPLGREGISTROPROD,
CONFDANFE.IMPLSLOTE,
CONFDANFE.IMPLSGERMINACAO,
CONFDANFE.IMPLSATESTADO,
CONFDANFE.IMPLSPUREZA,
CONFDANFE.IMPLSVARIEDADE,
CONFDANFE.IMPLSPENEIRA,
CONFDANFE.IMPLSVALIDADE,
CONFDANFE.IMPLSCATEGORIA,
CONFDANFE.IMPLSSAFRA,
CONFDANFE.IMPLSESPECIE,
CONFDANFE.IMPLSCULTIVAR,
CONFDANFE.IMPLSQUANTIDADE,
CONFDANFE.IMPLSPESO,
CONFDANFE.IMPLSNOMEPROD,
CONFDANFE.IMPLSRENASEM,
CONFDANFE.IMPLSBOLETIM,
CONFDANFE.IMPLSPMS,
CONFDANFE.IMPLVLOTE,
CONFDANFE.IMPLVMESFAB,
CONFDANFE.IMPLVANOFAB,
CONFDANFE.IMPLVVALIDADE,
CONFDANFE.IMPLVFABRICANTE,
CONFDANFE.IMPLVQUANTIDADE,
CONFDANFE.IMPLDLOTE,
CONFDANFE.IMPLDDATAVALIDADE,
CONFDANFE.IMPLDDATAFABRICACAO,
CONFDANFE.IMPLDQUANTIDADE,
CONFDANFE.IMPNROPED,
CONFDANFE.IMPREPRE,
CONFDANFE.IMPUSER,
CONFDANFE.DADOSEMIT,
CONFDANFE.IMPREPRENOME,
PREPRESE.DESCRICAO AS NOMEREPRESENT,
NFCFG.NACIMPEXP,
NFCAB.EXPNCM,
NFCAB.EXPRE,
NFCAB.EXPVLRFOB,
NFCAB.EXPTXDOLAR,
NFCAB.EXPNAVIO,
NFCAB.EXPDESCITEM,
NFCAB.EXPEMBALAGEM,
NFCAB.USERID,
/* DADOS DO EMITENTE */
EMI.CGC AS CNPJEMI,
EMI.NOME AS NOMEEMI,
EMI.FANTASIA AS FANTASIAEMI,
EMI.NOME AS RAZAOSOCIALEMI,
EMI.ENDERECO AS ENDERECOEMI,
EMI.BAIRRO AS BAIRROEMI,
EMI.NUMERO AS NUMEROEMI,
EMI.COMPLEMENT AS COMPLEMENTOEMI,
CIDEMI.NOME AS NOMECIDADEEMI,
CIDEMI.UF AS UFEMI,
EMI.TELEFONE AS TELEMI,
EMI.FAX AS FAXEMI,
EMI.CEP AS CEPEMI,
EMI.INSCESTAD AS INSESTADEMI,
EMI.LOGOTIPO,
— DADOS DO DESTINATÁRIO
DEST.NOME || CHR(45) || DEST.NUMEROCM AS NOMECLI,
DEST.CNPJF AS CNPJCLI,
COALESCE(END_ALTERNATIVO.ENDERECO, DEST.ENDERECO) AS ENDERECOCLI,
COALESCE(END_ALTERNATIVO.BAIRRO, DEST.BAIRRO) AS BAIRROCLI,
COALESCE(END_ALTERNATIVO.CEP, DEST.CEP) AS CEPCLI,
COALESCE(CID_END_ALTERNATIVO.NOME, CIDDEST.NOME) AS NOMECIDADECLI,
COALESCE(END_ALTERNATIVO.TELEFONE, DEST.TELEFONE) AS TELCLI,
COALESCE(CID_END_ALTERNATIVO.UF, CIDDEST.UF) AS UFCLI,
COALESCE(UF_END_ALTERNATIVO.CODIGO, UFDEST.CODIGO) AS CUF,
COALESCE(END_ALTERNATIVO.NUMEROEND, DEST.NUMEROEND) AS NUMEROENDCLI,
CASE
WHEN DEST.SEXO CHR(74) THEN COALESCE(END_ALTERNATIVO.CREDENCIALAGRO, DEST.CREDENCIALAGRO)
ELSE COALESCE(END_ALTERNATIVO.CREDENCIALAGRO, DEST.INSCESTAD)
END AS INSCESTADCLI,
NFCAB.DTEMISSAO,
NFCAB.DTENTSAI AS DTSAIDA,
NFITEM.HORA AS HRSAIDA,
— TOTAIS DOS IMPOSTOS
ICMS.BASETRIBUTADA AS BASEICMS,
ICMS.VALORIMPOSTO AS VLRICMS,
ICMS.BASEST AS BASEICMSSU,
ICMS.VALORSUBSTITUICAO AS VLRICMSSUB,
NFFRETE.VALORFRETE AS FRETE,
NFFRETE.VALORSEGURO AS SEGURO,
NFFRETE.FRETEBASE,
NFFRETE.FRETEICMS,
COALESCE(NFDESC.VALORDESCONTO, 0) + COALESCE(NFDESC.VALORDESCONTOMAOOBRA, 0) AS DESCONTOS,
COALESCE(NFCAB.DESPACESSORIA,0) + COALESCE(NFCAB.OUTROSACRESC,0) AS OUTROS,
NFDESC.IMPOSTODESC, NFDESC.IMPOSTODESCNOME, NFDESC.IMPOSTODESCTOTNF,
NFDESC.IMPOSTODESCNOMETOTNF,
NFDESC.IMPOSTONAOINCTOTFINN, NFDESC.IMPOSTONAOINCNOMETOT,
/* Utilizado em um PegaCampo no OnPrint da variavel vVlrIPI – Lentidão no Oracle
IPI.VALORIMPOSTO AS VLRIPI,*/
CONFAGROE.IMPOSTOIPI,
— DADOS DO FRETE
COALESCE(NFTRANSP.NOMEINFORMADO, PRESTADOR.NOME) AS NOMEPRE,
CASE NFTRANSP.FRETEPORCONTA WHEN CHR(69) THEN 1 ELSE 2 END AS FRETEPORCONTA,
NFTRANSP.PLACA AS VEICULO,
NFTRANSP.UFPLACA AS UFVEICULO,
CASE
WHEN (NFTRANSP.CPF IS NOT NULL) AND (NFTRANSP.CPF CHR(32)) THEN NFTRANSP.CPF
WHEN (NFTRANSP.CGC IS NOT NULL) AND (NFTRANSP.CGC CHR(32)) THEN NFTRANSP.CGC
ELSE PRESTADOR.CNPJF
END AS CNPJPRE,
COALESCE(NFTRANSP.ENDERECO, PRESTADOR.ENDERECO) AS ENDERECOPRE,
COALESCE(CIDNFTRANSP.NOME, CIDPRE.NOME) AS NOMECIDADEPRE,
COALESCE(CIDNFTRANSP.UF, CIDPRE.UF) AS UFPRE,
CASE
WHEN (NFTRANSP.INSCPRODUTOR IS NOT NULL) AND (NFTRANSP.INSCPRODUTOR CHR(32)) THEN NFTRANSP.INSCPRODUTOR
WHEN (NFTRANSP.INSCESTAD IS NOT NULL) AND (NFTRANSP.INSCESTAD CHR(32)) THEN NFTRANSP.INSCESTAD
WHEN (PRESTADOR.CREDENCIALAGRO IS NOT NULL) AND (PRESTADOR.CREDENCIALAGRO CHR(32)) THEN PRESTADOR.CREDENCIALAGRO
ELSE PRESTADOR.INSCESTAD
END AS INSCESTADPRE,
NFTRANSP.QUANTIDADE AS QTDTRANSP,
NFTRANSP.ESPECIE AS ESPECIETRANSP,
NFTRANSP.MARCA AS MARCATRANSP,
NFTRANSP.PESOBRUTO AS PESOBRUTOTRANSP,
NFTRANSP.PESOLIQUIDO AS PESOLIQUIDTRANSP,
NFMSG.MENSAGEM, NFMSG.MSGTRIB, NFCAB.OBSFISCALGER, NFMSG.MSGFISCO,
NFCAB.RECID_RESERVADO, NFCAB.RECID_RESERVADO2, NFMSGCAD.MSG,
COALESCE(NFCAB.VALORPROD, 0) – COALESCE(NFCAB.VLRNFANT, 0) AS TOTPRODUTOS,
NFCAB.VALOR,
COALESCE(NFCAB.VALORPRODBRUTO,
(COALESCE(NFCAB.VALORPROD,0) – COALESCE(NFCAB.VLRNFANT,0) –
COALESCE(NFDESC.VALORDESCONTO, 0))) AS VALORPRODBRUTO,
NFCAB.VLRNFANT,
/DADOS DOS PRODUTOS/
NFITEM.ITEM,
ITEMAGRO.DESCRICAO,
ITEMAGRO.LOTECTRL,
PCLASFIS.NCM AS NBMSH,
NFITEMIMPOSTO_ICMS.CST,
NFITEM.CFOP AS CFOP,
ITEMAGRO.UNIDADE,
NFITEM.QUANTIDADE,
NFITEM.SEQNOTAITEM,
NFITEM.EMBALAGEM,
NFITEM.BONIFICACAO,
NFITEM.VALORUNITARIO,
CASE
WHEN COALESCE(CONFDANFE.VLRUNILIQ, CHR(78)) = CHR(83) THEN
CASE WHEN NFITEM.QUANTIDADE = 0 THEN
ROUND(NFITEM.VALORTOTAL, NFCFG.CASASDECUNITDANFE)
ELSE
ROUND((NFITEM.VALORTOTAL / NFITEM.QUANTIDADE), NFCFG.CASASDECUNITDANFE)
END
ELSE
CASE WHEN NFITEM.QUANTIDADE = 0 THEN
ROUND(COALESCE(NFITEM.VALORUNITARIO, NFITEM.VALORTOTAL+COALESCE(NFITEM.DESCTOTAL,0)),
NFCFG.CASASDECUNITDANFE)
ELSE
ROUND(COALESCE(NFITEM.VALORUNITARIO, NFITEM.VALORTOTAL+COALESCE(NFITEM.DESCTOTAL,0) / NFITEM.QUANTIDADE),
NFCFG.CASASDECUNITDANFE)
END
END AS VLRUNIT,
NFITEM.VALORTOTAL AS VLRTOTAL,
NFITEMIMPOSTO_ICMS.BASETRIBUTADA AS BASEICMS_ITEM,
NFITEMIMPOSTO_ICMS.VALORIMPOSTO AS VLRICMS_ITEM,
NFITEMIMPOSTO_ICMS.ALIQUOTA AS ALIQICMS_ITEM,
NFITEMIMPOSTO_IPI.VALORIMPOSTO AS VALORIPI_ITEM,
NFITEMIMPOSTO_IPI.ALIQUOTA AS ALIQIPI_ITEM,
NFITEM.COMPLEMENTO, ITEMAGRO.REFERENCIA, NFITEM.PH,
SAFRA_ITEM.DTINICIAL AS SAFRAITEM_INICIO,
NFITEM.RENDARROZGRAOINT, NFITEM.RENDARROZGRAOQUE,
NFITEM.RENDARROZCASCA, NFITEM.RENDARROZFARELO,
CONFDANFE.DESCUNI, NFITEM.DESCTOTAL,
LEPRECOPESSOA.MSGNF AS LEPRECOPESSOA_MSGNF,
NFCABTXARM.DESCNOME, NFCABTXARM.DESCVALOR, NFCAB.REPRESENT,
NFCAB.NOTACONF, NFCAB.NUMEROCM, NFCFG.PESFINORIGFIXTRANSF ,
NFCFG.IMPRIMEPRECOEBONIFICACAO
FROM NFCAB
LEFT JOIN NFITEM
ON (NFITEM.ESTAB = NFCAB.ESTAB)
AND (NFITEM.SEQNOTA = NFCAB.SEQNOTA)
LEFT JOIN CFOP
ON (CFOP.CFOP = NFITEM.CFOP)
LEFT JOIN SAFRAS SAFRA_ITEM
ON (SAFRA_ITEM.SAFRA = NFITEM.SAFRA)
LEFT JOIN ITEMAGRO
ON (ITEMAGRO.ITEM = NFITEM.ITEM)
LEFT JOIN PCLASFIS
ON (ITEMAGRO.CLASFISCAL = PCLASFIS.CLASFISCAL)
LEFT JOIN NFCFG
ON (NFCFG.NOTACONF = NFCAB.NOTACONF)
LEFT JOIN NFMSGCAD
ON NFMSGCAD.CODMSG = NFCFG.CODMSG
LEFT JOIN NFCABTXARM
ON (NFCABTXARM.ESTAB = NFCAB.ESTAB)
AND (NFCABTXARM.SEQNOTA = NFCAB.SEQNOTA)
LEFT JOIN PREPRESE
ON(NFCAB.REPRESENTESTAB = PREPRESE.EMPRESA)
AND(NFCAB.REPRESENT = PREPRESE.REPRESENT)
LEFT JOIN PEMPRESA EMI
ON (EMI.EMPRESA = NFCAB.ESTAB)
LEFT JOIN CIDADE CIDEMI
ON (CIDEMI.CIDADE = EMI.CIDADE)
LEFT JOIN NFDESC
ON (NFDESC.ESTAB = NFCAB.ESTAB)
AND (NFDESC.SEQNOTA = NFCAB.SEQNOTA)
LEFT JOIN NFMSG
ON (NFMSG.ESTAB = NFCAB.ESTAB)
AND (NFMSG.SEQNOTA = NFCAB.SEQNOTA)
LEFT JOIN CONFAGROE
ON (CONFAGROE.ESTAB = NFCAB.ESTAB)
LEFT JOIN CONFDANFE
ON (CONFDANFE.ESTAB = NFCAB.ESTAB)
LEFT JOIN NFTRANSP
ON (NFTRANSP.ESTAB = NFCAB.ESTAB)
AND (NFTRANSP.SEQNOTA = NFCAB.SEQNOTA)
LEFT JOIN NFFRETE
ON (NFCAB.ESTAB = NFFRETE.ESTAB)
AND (NFCAB.SEQNOTA = NFFRETE.SEQNOTA)
LEFT JOIN LEPRECOPESSOA
ON (LEPRECOPESSOA.ESTAB = NFCAB.ESTAB)
AND (LEPRECOPESSOA.SEQNOTA = NFCAB.SEQNOTA)
LEFT JOIN CIDADE CIDNFTRANSP
ON (CIDNFTRANSP.CIDADE = NFTRANSP.CIDADE)
LEFT JOIN ENDERECO END_ALTERNATIVO
ON (END_ALTERNATIVO.NUMEROCM = COALESCE(NFCAB.CLIENTEIMP, NFCAB.NUMEROCM))
AND (END_ALTERNATIVO.SEQENDERECO = NFCAB.SEQENDERECO)
LEFT JOIN CIDADE CID_END_ALTERNATIVO
ON (CID_END_ALTERNATIVO.CIDADE = END_ALTERNATIVO.CIDADE)
LEFT JOIN UF UF_END_ALTERNATIVO
ON (UF_END_ALTERNATIVO.UF = CID_END_ALTERNATIVO.UF)
LEFT JOIN CONTAMOV DEST
ON (DEST.NUMEROCM = COALESCE(NFCAB.CLIENTEIMP, NFCAB.NUMEROCM))
LEFT JOIN CIDADE CIDDEST
ON (DEST.CIDADE = CIDDEST.CIDADE)
LEFT JOIN UF UFDEST
ON (UFDEST.UF = CIDDEST.UF)
LEFT JOIN CONTAMOV PRESTADOR
ON (PRESTADOR.NUMEROCM = NFTRANSP.PRESTADOR)
LEFT JOIN CIDADE CIDPRE
ON (CIDPRE.CIDADE = PRESTADOR.CIDADE)
LEFT JOIN NFCABIMPOSTO ICMS
ON (ICMS.ESTAB = NFCAB.ESTAB)
AND (ICMS.SEQNOTA = NFCAB.SEQNOTA)
AND (ICMS.IMPOSTO = CONFAGROE.IMPOSTOICMS)
AND ((EMI.MSGSIMPLES IS NULL) OR (EMI.MSGSIMPLES = CHR(32)))
/LEFT JOIN NFCABIMPOSTO IPI
ON (IPI.ESTAB = NFCAB.ESTAB)
AND (IPI.SEQNOTA = NFCAB.SEQNOTA)
AND (IPI.IMPOSTO = CONFAGROE.IMPOSTOIPI)/
LEFT JOIN NFITEMIMPOSTO NFITEMIMPOSTO_ICMS
ON (NFITEMIMPOSTO_ICMS.ESTAB = NFITEM.ESTAB)
AND (NFITEMIMPOSTO_ICMS.SEQNOTA = NFITEM.SEQNOTA)
AND (NFITEMIMPOSTO_ICMS.SEQNOTAITEM = NFITEM.SEQNOTAITEM)
AND (NFITEMIMPOSTO_ICMS.IMPOSTO = CONFAGROE.IMPOSTOICMS)
AND ((EMI.MSGSIMPLES IS NULL) OR (EMI.MSGSIMPLES = CHR(32)))
LEFT JOIN NFITEMIMPOSTO NFITEMIMPOSTO_IPI
ON (NFITEMIMPOSTO_IPI.ESTAB = NFITEM.ESTAB)
AND (NFITEMIMPOSTO_IPI.SEQNOTA = NFITEM.SEQNOTA)
AND (NFITEMIMPOSTO_IPI.SEQNOTAITEM = NFITEM.SEQNOTAITEM)
AND (NFITEMIMPOSTO_IPI.IMPOSTO = CONFAGROE.IMPOSTOIPI)
WHERE (NFCAB.ESTAB = :ESTAB) AND (NFCAB.SEQNOTA)