Dividir valor do frete pelo número de notas do mesmo conhecimento
Bom dia a todos,
Estou fazendo um relatório de fretes para a minha empresa e não estou conseguindo dividir o valor do frete pela quantidade de notas dos conhecimentos, este meu SQL usa 3 tabelas, a PCNFBASEENT onde o valor do frete é encontrado, a PCNFSAID onde busco umas informações e a PCCONHECIMENTOFRETEI onde está os nr das NF dos conhecimentos (aqui é onde está o problema, a quantidade de NF e linhas vária e faz com que o valor do frete se repita em todos os conhecimentos do mesma transação). Preciso fazer com que o valor total do frete se divida entre as varias notas da tabela PCCONHECIMENTOFRETEI, rateando o valor e facilitando no meu relatório, pois o valor não vai se repetir como no está hoje.
Estou fazendo um relatório de fretes para a minha empresa e não estou conseguindo dividir o valor do frete pela quantidade de notas dos conhecimentos, este meu SQL usa 3 tabelas, a PCNFBASEENT onde o valor do frete é encontrado, a PCNFSAID onde busco umas informações e a PCCONHECIMENTOFRETEI onde está os nr das NF dos conhecimentos (aqui é onde está o problema, a quantidade de NF e linhas vária e faz com que o valor do frete se repita em todos os conhecimentos do mesma transação). Preciso fazer com que o valor total do frete se divida entre as varias notas da tabela PCCONHECIMENTOFRETEI, rateando o valor e facilitando no meu relatório, pois o valor não vai se repetir como no está hoje.
SELECT A.FORNECEDOR, A.VLTOTAL, A.NUMNOTA AS "NF_FRETE", A.DTENTRADA, A.DTEMISSAO, A.CODFORNEC, B.CHAVENFE, B.NUMNOTA, C.NUMTRANSCONHEC, B.NUMITENS FROM PCNFBASEENT A, PCNFSAID B, PCCONHECIMENTOFRETEI C WHERE A.NUMTRANSENT = C.NUMTRANSCONHEC AND C.CHAVENFE = B.CHAVENFE AND B.NUMNOTA = C.NUMNOTA AND A.ESPECIE = 'CT' AND A.DTEMISSAO BETWEEN :V_DATA_INI AND :V_DATA_FIM AND A.CODFORNEC = :CODFORNEC AND A.NUMNOTA = :NUMNOTA AND C.NUMTRANSCONHEC IN :NUMTRANSCONHEC
Giovane
Curtidas 0
Respostas
Jerson Boer
26/01/2018
Olá Giovane,
Se a distribuição de valor for igual entre os conhecimentos proporcionalmente à quantidade existente, tente montar uma subquery que faça a contagem dos "conhecimentos" existentes em cada nota e relacione com a nota para distribuição do valor, algo como:
Aí em sua query você vai usar:
Se a distribuição de valor for igual entre os conhecimentos proporcionalmente à quantidade existente, tente montar uma subquery que faça a contagem dos "conhecimentos" existentes em cada nota e relacione com a nota para distribuição do valor, algo como:
(Select CodigoChave, Count(CodigoConhecimento) as Qtde from PCCONHECIMENTOFRETEI group by CodigoChave) as ContagemNF ON ContagemNF.CodigoChave = TabelaNova.CodigoChave
Aí em sua query você vai usar:
Select A.VLTOTAL / ContagemNF.Qtde as ValorIndividual
GOSTEI 0
Emerson Nascimento
26/01/2018
tente algo assim.
SELECT
A.FORNECEDOR,
A.VLTOTAL,
A.NUMNOTA AS "NF_FRETE",
A.DTENTRADA,
A.DTEMISSAO,
A.CODFORNEC,
B.CHAVENFE,
B.NUMNOTA,
C.NUMTRANSCONHEC,
B.NUMITENS,
(A.VLTOTAL / (SELECT COUNT(*) FROM PCCONHECIMENTOFRETEI X WHERE X.NUMTRANSCONHEC = A.NUMTRANSENT)) RATEIO
FROM
PCNFBASEENT A
LEFT JOIN
PCCONHECIMENTOFRETEI C ON
C.NUMTRANSCONHEC = A.NUMTRANSENT
LEFT JOIN
PCNFSAID B ON
B.CHAVENFE = C.CHAVENFE
AND B.NUMNOTA = C.NUMNOTA
WHERE
AND A.ESPECIE = 'CT'
AND A.DTEMISSAO BETWEEN :V_DATA_INI AND :V_DATA_FIM
AND A.CODFORNEC = :CODFORNEC
AND A.NUMNOTA = :NUMNOTA
AND C.NUMTRANSCONHEC IN :NUMTRANSCONHEC
obs.: a solução está na linha da subquery, onde o valor total está sendo dividido pelo número de notas, gerando o valor rateado. eu só alterei o relacionamento pra eu poder entender melhor, visto que não conheço tuas tabelas.
SELECT
A.FORNECEDOR,
A.VLTOTAL,
A.NUMNOTA AS "NF_FRETE",
A.DTENTRADA,
A.DTEMISSAO,
A.CODFORNEC,
B.CHAVENFE,
B.NUMNOTA,
C.NUMTRANSCONHEC,
B.NUMITENS,
(A.VLTOTAL / (SELECT COUNT(*) FROM PCCONHECIMENTOFRETEI X WHERE X.NUMTRANSCONHEC = A.NUMTRANSENT)) RATEIO
FROM
PCNFBASEENT A
LEFT JOIN
PCCONHECIMENTOFRETEI C ON
C.NUMTRANSCONHEC = A.NUMTRANSENT
LEFT JOIN
PCNFSAID B ON
B.CHAVENFE = C.CHAVENFE
AND B.NUMNOTA = C.NUMNOTA
WHERE
AND A.ESPECIE = 'CT'
AND A.DTEMISSAO BETWEEN :V_DATA_INI AND :V_DATA_FIM
AND A.CODFORNEC = :CODFORNEC
AND A.NUMNOTA = :NUMNOTA
AND C.NUMTRANSCONHEC IN :NUMTRANSCONHEC
obs.: a solução está na linha da subquery, onde o valor total está sendo dividido pelo número de notas, gerando o valor rateado. eu só alterei o relacionamento pra eu poder entender melhor, visto que não conheço tuas tabelas.
GOSTEI 0