- Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 9 anos, 11 meses atrás por rman.
-
AutorPosts
-
23 de dezembro de 2014 às 5:27 pm #107257Guilherme Vieira de StefaniParticipante
Bom dia a todos,
Estou quebrando a cabeça a 2 dias em cima de um problema que era para ser fácil mas não está sendo. Tenho que listar, todos os documentos relativos a venda na empresa que trabalho. São originários de notas fiscais sendo que alguns tem comissão e outros não. Até ai tudo bem, o fato é que os que não estou conseguindo trazer somente os que não tem comissão.
O meu problema está na relação entre as tabelas:
M3_DOCTO >> Documento em si.
M3_PARTEDOCTO >> Tabela intermediária que define quais informações o documento tem como Contabilização, Comissão, Escrita Fiscal. No caso desta tabela, quando a coluna IDF_PARTEDOCTO for igual a 1085, quer dizer que este documento tem comissão.
M3_DOCTOCOM >> Tabela que guarda os valores de comissão do documento.
O que eu quero é listar somente os documentos que não existam na tabela M3_DOCTOCOM. Alguem pode dar uma dica? Uso Oracle 11g.
Deste já agradeço a atenção!
Comando completo abaixo!
select distinct(A.DATAVCTOSAL) as Data_Vencto,
A.DATAEMI as DataEmi,
J.DOCTODIGITADO ||’-‘|| A.IDENTPARCELA||’-‘||ZZ.QDADEPARC as PARCELA,
A.VALSAL as VlrSaldo,
A.NOSNUM as Nosso_Numero,
HH.IDENTIFICACAO as CPF_CNPJ,
J.DOCTODIGITADO AS NF,
— ( Select BB.CODIGO as ID_Repre
— from m3_doctontfiv AA
— inner join m3_repre BB on BB.id = AA.idf_representante
— where AA.ida = J.id) as Codigo_Repre,
— TRUNC((A.VALSAL * (JJ.PERCCOMIS)/100),2) AS Comissao,
(CASE WHEN A.HISTORICO = ‘2 – BOLETO’ THEN 2 ELSE 1 END) AS PORTADOR,
(CASE WHEN A.HISTORICO = ‘2 – BOLETO’ THEN 2 ELSE 1 END) AS TIPO_COBRANCA,
K.CODIGO as COD_Filial –Filtrar Filial
from M3_PARCRE A
INNER JOIN M3_TIPCOB B ON B.ID = A.IDF_TIPCOB
INNER JOIN M3_MOVFIN H ON H.ID = A.IDA
INNER JOIN M3_INTEGRA I ON I.ID = H.IDF_INTEGRA
INNER JOIN M3_DOCTO J ON J.ID = I.IDF_DOCTO
INNER JOIN M3_FILIAL K ON K.ID = J.IDF_FILIAL
INNER JOIN M3_TIPDOC L ON L.ID = J.IDF_TPDOCTO
INNER JOIN M3_EMPRESA Q ON Q.ID = K.IDF_EMPRESA
INNER JOIN MTMG_IDENT M ON M.ID = J.IDF_IDENT
LEFT OUTER JOIN M3_BANCO C ON C.ID = A.IDF_BANCO
LEFT OUTER JOIN MTMG_PAPELREL D ON D.ID = C.IDA
LEFT OUTER JOIN MTMG_IDENT E ON E.ID = D.IDF_IDENT
LEFT OUTER JOIN M3_CLIECRE F ON F.IDA = A.ID
LEFT OUTER JOIN M3_CLIENTE G ON G.ID = F.IDF_CLIENTE
INNER JOIN MTMG_PAPELREL GG ON GG.ID = G.IDA
INNER JOIN MTMG_IDENT HH ON HH.ID = GG.IDF_IDENT
LEFT JOIN M3_PARTEDOCTO LL ON LL.IDF_DOCTO = J.ID
RIGHT JOIN M3_DOCTOCOM JJ ON JJ.IDA = LL.ID
INNER JOIN M3_PARTEDOCTO YY ON YY.IDF_DOCTO = J.ID
INNER JOIN M3_CABPADOCTO WW ON WW.IDA = YY.ID
INNER JOIN M3_CONDPARCEL ZZ ON ZZ.ID = WW.IDF_CONDPARCEL
LEFT OUTER JOIN M3_OcoCRE BB ON BB.IDF_ParCRE = A.ID
where (( A.DATAVCTOSAL >= TO_DATE(’01/01/1900′,’MM/DD/YYYY’))
and (A.DATAVCTOSAL <= TO_DATE('12/31/2999','MM/DD/YYYY')) and (a.situacao not in ('3','2','4'))) --4 = Renegociado / 3 = Cancelado / 2 = Baixado and (BB.Momento <= TO_DATE('18/12/2014','DD/MM/YYYY')) and K.CODIGO = '80'23 de dezembro de 2014 às 7:53 pm #107260rmanParticipante@Guilherme Vieira de Stefani
A grande sacada é utilizar as cláusulas NOT EXISTS:
select distinct(A.DATAVCTOSAL) as Data_Vencto,
A.DATAEMI as DataEmi,
J.DOCTODIGITADO ||'-'|| A.IDENTPARCELA||'-'||ZZ.QDADEPARC as PARCELA,
A.VALSAL as VlrSaldo,
A.NOSNUM as Nosso_Numero,
HH.IDENTIFICACAO as CPF_CNPJ,
J.DOCTODIGITADO AS NF,
-- ( Select BB.CODIGO as ID_Repre
-- from m3_doctontfiv AA
-- inner join m3_repre BB on BB.id = AA.idf_representante
-- where AA.ida = J.id) as Codigo_Repre,
-- TRUNC((A.VALSAL * (JJ.PERCCOMIS)/100),2) AS Comissao,
(CASE WHEN A.HISTORICO = '2 - BOLETO' THEN 2 ELSE 1 END) AS PORTADOR,
(CASE WHEN A.HISTORICO = '2 - BOLETO' THEN 2 ELSE 1 END) AS TIPO_COBRANCA,
K.CODIGO as COD_Filial --Filtrar Filial
from M3_PARCRE A
INNER JOIN M3_TIPCOB B ON B.ID = A.IDF_TIPCOB
INNER JOIN M3_MOVFIN H ON H.ID = A.IDA
INNER JOIN M3_INTEGRA I ON I.ID = H.IDF_INTEGRA
INNER JOIN M3_DOCTO J ON J.ID = I.IDF_DOCTO
INNER JOIN M3_FILIAL K ON K.ID = J.IDF_FILIAL
INNER JOIN M3_TIPDOC L ON L.ID = J.IDF_TPDOCTO
INNER JOIN M3_EMPRESA Q ON Q.ID = K.IDF_EMPRESA
INNER JOIN MTMG_IDENT M ON M.ID = J.IDF_IDENT
LEFT OUTER JOIN M3_BANCO C ON C.ID = A.IDF_BANCO
LEFT OUTER JOIN MTMG_PAPELREL D ON D.ID = C.IDA
LEFT OUTER JOIN MTMG_IDENT E ON E.ID = D.IDF_IDENT
LEFT OUTER JOIN M3_CLIECRE F ON F.IDA = A.ID
LEFT OUTER JOIN M3_CLIENTE G ON G.ID = F.IDF_CLIENTE
INNER JOIN MTMG_PAPELREL GG ON GG.ID = G.IDA
INNER JOIN MTMG_IDENT HH ON HH.ID = GG.IDF_IDENT
LEFT JOIN M3_PARTEDOCTO LL ON LL.IDF_DOCTO = J.ID
INNER JOIN M3_PARTEDOCTO YY ON YY.IDF_DOCTO = J.ID
INNER JOIN M3_CABPADOCTO WW ON WW.IDA = YY.ID
INNER JOIN M3_CONDPARCEL ZZ ON ZZ.ID = WW.IDF_CONDPARCEL
LEFT OUTER JOIN M3_OcoCRE BB ON BB.IDF_ParCRE = A.ID
where NOT EXISTS(
SELECT 1
FROM M3_DOCTOCOM JJ
WHERE JJ.IDA = LL.ID
)
AND (( A.DATAVCTOSAL >= TO_DATE('01/01/1900','MM/DD/YYYY'))
and (A.DATAVCTOSAL <= TO_DATE('12/31/2999','MM/DD/YYYY'))
and (a.situacao not in ('3','2','4'))) --4 = Renegociado / 3 = Cancelado / 2 = Baixado
and (BB.Momento <= TO_DATE('18/12/2014','DD/MM/YYYY'))
and K.CODIGO = '80'
-
AutorPosts
- Você deve fazer login para responder a este tópico.