Consulta três tabelas

Oracle PL SQL

28/11/2018

Oi Pessoal,
Tudo bem?

Estou tentando fazer uma consulta de faturamento (R$) e cotação (R$) por período(mês/ano).
Porem o valor do faturamento bateu e o valor da cotação não.
Preciso da informação tipo (EMPRESA | FATURAMENTO | COTAÇÃO | PERIODO)

Alguém pode me ajudar?

Obrigado.
Vinícius Nogueira

Vinícius Nogueira

Curtidas 0

Respostas

Vinícius Nogueira

Vinícius Nogueira

28/11/2018

No banco tenho três tabelas.
Uma tabela é referente a notas emitidas pela empresa (Venda/devolução).
Outra tabela tenho as notas de terceiros, necessária por existir devoluções emitidas por terceiros.

Fiz um UNION ALL entre as duas para ter o faturamento - devoluções.

Dentro deste UNION ALL preciso colocar a consulta da outra tabela, das cotações.

Fiz um Left Join / Join / FULL OUTER JOIN / INNER, com o select que fiz das cotações e validei os valores estão batendo.
Porem quando faço a união com o select do faturamento, os valores da cotação não batem, somente o faturamento.
GOSTEI 0
Ricardo Pestana

Ricardo Pestana

28/11/2018

bom dia,

Posta seu sql por favor....
GOSTEI 0
Ricardo Araujo

Ricardo Araujo

28/11/2018

Poderia adicione o SQL, assim vamos verificar o que esta acontecendo que o valor não esta batendo.

GOSTEI 0
Vinícius Nogueira

Vinícius Nogueira

28/11/2018

bom dia,

Posta seu sql por favor....


/*CONSULTA DAS NOTAS EMITIDAS PELA EMPRESA*/
SELECT
CODI_EMP, FANT_EMP,
CODI_TRA,
FANT_TRA,
CODI_PSV,
DESC_PSV,
SUM(QUANTIDADE) AS QUANTIDADE,
ROUND(SUM(VALOR_TOTAL),2) AS VALOR_TOTAL,
SUM(QTD_ORC),
SUM(VLR_ORC),
MES || '/' || ANO AS MES_ANO
FROM(
SELECT
NF.CODI_EMP,
EMP.FANT_EMP,
NF.CODI_TRA,
TRA.FANT_TRA,
INF.CODI_PSV,
PSV.DESC_PSV,
EXTRACT (MONTH FROM NF.DEMI_NOT) AS MES,
EXTRACT (YEAR FROM NF.DEMI_NOT) AS ANO,
SUM (CASE WHEN FT.FUNC_TOP = 'A' THEN INF.QTDE_INO ELSE (INF.QTDE_INO * -1) END) AS QUANTIDADE,
SUM (CASE WHEN FT.FUNC_TOP = 'A' THEN INF.QTDE_INO *INF.VLIQ_INO ELSE ((INF.QTDE_INO *INF.VLIQ_INO) * -1) END) AS VALOR_TOTAL,
SUM(ORC.QUANTIDADE) AS QTD_ORC,
SUM(ORC.VALOR_TOTAL) AS VLR_ORC
FROM INOTA INF
INNER JOIN NOTA NF ON (NF.NPRE_NOT = INF.NPRE_NOT)
INNER JOIN FUNCAOTOPER FT ON (FT.CODI_TOP = NF.CODI_TOP AND FT.CODI_PTO = 102)
LEFT JOIN CADEMP EMP ON (NF.CODI_EMP = EMP.CODI_EMP)
LEFT JOIN TRANSAC TRA ON (NF.CODI_TRA = TRA.CODI_TRA)
LEFT JOIN PRODSERV PSV ON (INF.CODI_PSV = PSV.CODI_PSV)
/*CONSULTA DAS COTAÇÕES*/
LEFT JOIN (SELECT
ORC.CODI_EMP ,
ORC.CODI_TRA ,
IOR.CODI_PSV ,
SUM(IOR.QTDE_IOR) AS QUANTIDADE,
SUM(IOR.QTDE_IOR * IOR.VLOR_IOR) AS VALOR_TOTAL,
EXTRACT (MONTH FROM ORC.DEMI_ORC) AS MES,
EXTRACT (YEAR FROM ORC.DEMI_ORC) AS ANO

FROM ORCAMENT ORC
LEFT JOIN IORCAMEN IOR ON (ORC.CODI_EMP = IOR.CODI_EMP AND ORC.ORCA_ORC = IOR.ORCA_ORC)

WHERE ORC.CODI_EMP IN (14) AND ORC.DEMI_ORC BETWEEN '01-10-2018' AND '31-10-2018'
GROUP BY ORC.CODI_EMP, ORC.CODI_TRA, IOR.CODI_PSV, EXTRACT (MONTH FROM ORC.DEMI_ORC), EXTRACT (YEAR FROM ORC.DEMI_ORC)
) ORC ON
(NF.CODI_EMP = ORC.CODI_EMP AND NF.CODI_TRA = ORC.CODI_TRA AND INF.CODI_PSV = ORC.CODI_PSV AND EXTRACT (MONTH FROM NF.DEMI_NOT) = ORC.MES AND EXTRACT (YEAR FROM NF.DEMI_NOT) = ORC.ANO)
/* INCLUÍ ESTE PARÂMETRO PARA EVITAR DUPLICIDADE DE REGISTROS NOS RELATÓRIOS */
WHERE (NF.SITU_NOT = '5')
AND (NF.DEMI_NOT BETWEEN '01/10/2018' AND '31/10/2018') AND (NF.CODI_EMP IN (14))
GROUP BY NF.CODI_EMP,
EXTRACT (MONTH FROM NF.DEMI_NOT),
EXTRACT (YEAR FROM NF.DEMI_NOT),
EMP.FANT_EMP,
NF.CODI_TRA,
TRA.FANT_TRA,
INF.CODI_PSV,
PSV.DESC_PSV

UNION ALL

/*CONSULTA DAS NOTAS EMITIDAS POR TERCEIROS*/
SELECT
NF.CODI_EMP,
EMP.FANT_EMP,
NF.CODI_TRA,
TRA.FANT_TRA,
INF.CODI_PSV,
PSV.DESC_PSV,
EXTRACT (MONTH FROM NF.DREC_NFE) AS MES,
EXTRACT (YEAR FROM NF.DREC_NFE) AS ANO,
SUM (CASE WHEN FT.FUNC_TOP = 'A' THEN INF.QUAN_INF ELSE (INF.QUAN_INF * -1) END) AS QUANTIDADE,
SUM (CASE WHEN FT.FUNC_TOP = 'A' THEN INF.QUAN_INF *INF.VLIQ_INF ELSE ((INF.QUAN_INF *INF.VLIQ_INF) * -1) END) AS VALOR_TOTAL,
SUM(ORC.QUANTIDADE) AS QTD_ORC,
SUM(ORC.VALOR_TOTAL) AS VLR_ORC
FROM INFENTRA INF
INNER JOIN NFENTRA NF ON (NF.CODI_EMP = INF.CODI_EMP and NF.CODI_TRA = INF.CODI_TRA and
NF.NUME_NFE = INF.NUME_NFE and NF.SERI_NFE = INF.SERI_NFE)
INNER JOIN FUNCAOTOPER FT ON (FT.CODI_TOP = NF.CODI_TOP AND FT.CODI_PTO = 102)
LEFT JOIN CADEMP EMP ON (NF.CODI_EMP = EMP.CODI_EMP)
LEFT JOIN TRANSAC TRA ON (NF.CODI_TRA = TRA.CODI_TRA)
LEFT JOIN PRODSERV PSV ON (INF.CODI_PSV = PSV.CODI_PSV)
/*CONSULTA DAS COTAÇÕES*/
LEFT JOIN (SELECT
ORC.CODI_EMP ,
ORC.CODI_TRA ,
IOR.CODI_PSV ,
SUM(IOR.QTDE_IOR) AS QUANTIDADE,
SUM(IOR.QTDE_IOR * IOR.VLOR_IOR) AS VALOR_TOTAL,
EXTRACT (MONTH FROM ORC.DEMI_ORC) AS MES,
EXTRACT (YEAR FROM ORC.DEMI_ORC) AS ANO

FROM ORCAMENT ORC
LEFT JOIN IORCAMEN IOR ON (ORC.CODI_EMP = IOR.CODI_EMP AND ORC.ORCA_ORC = IOR.ORCA_ORC)

WHERE ORC.CODI_EMP IN (14) AND ORC.DEMI_ORC BETWEEN '01-10-2018' AND '31-10-2018'
GROUP BY ORC.CODI_EMP, ORC.CODI_TRA, IOR.CODI_PSV, EXTRACT (MONTH FROM ORC.DEMI_ORC), EXTRACT (YEAR FROM ORC.DEMI_ORC)
) ORC ON
(NF.CODI_EMP = ORC.CODI_EMP AND NF.CODI_TRA = ORC.CODI_TRA AND INF.CODI_PSV = ORC.CODI_PSV AND EXTRACT (MONTH FROM NF.DREC_NFE) = ORC.MES AND EXTRACT (YEAR FROM NF.DREC_NFE) = ORC.ANO)
/* INCLUÍ ESTE PARÂMETRO PARA EVITAR DUPLICIDADE DE REGISTROS NOS RELATÓRIOS */
WHERE (NF.DREC_NFE BETWEEN '01/10/2018' AND '31/10/2018') AND (NF.CODI_EMP IN (14))
GROUP BY NF.CODI_EMP,
EXTRACT (MONTH FROM NF.DREC_NFE),
EXTRACT (YEAR FROM NF.DREC_NFE),
EMP.FANT_EMP,
NF.CODI_TRA,
TRA.FANT_TRA,
INF.CODI_PSV,
PSV.DESC_PSV)
GROUP BY CODI_EMP, FANT_EMP, CODI_TRA, FANT_TRA, CODI_PSV, DESC_PSV, MES, ANO;
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

28/11/2018

você faz cotações (orçamentos) tanto para notas de entrada quanto para notas de saída? é isto mesmo?
porque aparentemente o relacionamento entre as tabelas nota x orcament e nfentra x orcament podem trazer orçamentos repetidos...
GOSTEI 0
Vinícius Nogueira

Vinícius Nogueira

28/11/2018

você faz cotações (orçamentos) tanto para notas de entrada quanto para notas de saída? é isto mesmo?
porque aparentemente o relacionamento entre as tabelas nota x orcament e nfentra x orcament podem trazer orçamentos repetidos...


Não, somente para algumas saídas. Não são para todos os clientes que são feitas as cotações(orçamentos).
Só acrescentei a tabela das notas de entrada devido as notas de devoluções emitidas por alguns clientes.
Por isso preciso subtrair no faturado.
GOSTEI 0
POSTAR