Consulta sem itens duplicado.

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
ricardos1000
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Ter, 27 Mar 2018 1:54 pm
Localização: São Paulo
Contato:

Boa tarde a todos, estou iniciando no forum, sou amante de tecnologia e autodidata, estou com um probleminha pra resolver, Criei um consulta onde pesquiso todos os pedidos feito em um determinado período, trazendo codigo, produto, qtde negociada, valor negociado, valor de tabela, custo, desconto e porcentagem, porem não pode haver código linhas com código de produto repetidos, as colunas tem que fazer a soma para cada item, já trouxe todos os dados, mais não consegui ainda remover as linnhas repetidas , abaixo o código, se alguém puder dar uma ajuda, agradeço muito

Selecionar tudo

SELECT DISTINCT
X.CODPROD
,X.DESCRPROD
,X.CODVOL
,X.QTDNEG AS QTDNEG
,ROUND(X.VLRTOT_ITEM,2) AS VLRTOT_NEGOCIADO
,ROUND(X.PRECOBASE,4) AS VLR_TABELA
,ROUND(X.TOTAL_VENDA,2) AS TOTAL_VENDA
,X.CUSTO
,ROUND((X.CUSTO * X.QTDNEG),2) AS CUSTO_X_QTDE
,ROUND(X.VALOR_DESCONTO,2) AS VALOR_DESCONTO

FROM (SELECT
ITE.CODPROD,
PRO.DESCRPROD,
SUM(ITE.QTDNEG) AS QTDNEG,
ITE.CODVOL,
ITE.PRECOBASE,
EXC.VLRVENDA,


CASE WHEN CAB.CODTIPOPER = '51' THEN
SUM((ITE.VLRTOT - ITE.VLRDESC) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
ELSE
SUM((ITE.VLRTOT - ITE.VLRDESC + ITE.VLRIPI) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
END AS VLRTOT_ITEM,

CASE WHEN CAB.CODTIPOPER = '51' THEN
SUM((ITE.PRECOBASE * ITE.QTDNEG) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
ELSE
SUM((ITE.PRECOBASE * ITE.QTDNEG + ITE.VLRIPI) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
END AS TOTAL_VENDA,

CASE WHEN CAB.CODTIPOPER = '51' THEN
SUM((ITE.VLRDESC) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
ELSE
SUM((ITE.VLRDESC + ITE.VLRIPI) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
END AS VALOR_DESCONTO,

CASE WHEN CAB.CODTIPOPER = '51' THEN
ROUND(SUM((ITE.VLRTOT - ITE.VLRDESC) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE)))) / (SELECT SUM((ITE.VLRTOT - ITE.VLRDESC) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE))))
FROM TGFCAB CAB, TGFITE ITE, TGFPRO PRO
WHERE CAB.NUNOTA = ITE.NUNOTA
AND CAB.CODTIPOPER IN (4,17,49,51,52,53,54,63,66,89,133,135,136,142,143,145,147,165)
AND CAB.DTNEG BETWEEN  '01-03-2018' AND '26-03-2018'
AND ITE.CODPROD = PRO.CODPROD
AND CAB.TIPMOV = 'P'
AND CAB.CODPARC NOT IN(62,63,64,65,66,67,1043)
AND PRO.USOPROD <> 'M') *100,2)
ELSE
ROUND(SUM((ITE.VLRTOT - ITE.VLRDESC + ITE.VLRIPI) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE)))) / (SELECT SUM((ITE.VLRTOT - ITE.VLRDESC + ITE.VLRIPI) * (1 + (CAB.VLRFRETE / (CAB.VLRNOTA-CAB.VLRFRETE)))) FROM TGFCAB CAB, TGFITE ITE, TGFPRO PRO
WHERE CAB.NUNOTA = ITE.NUNOTA
AND CAB.CODTIPOPER IN (4,17,49,51,52,53,54,63,66,89,133,135,136,142,143,145,147,165)
AND CAB.DTNEG BETWEEN '01-03-2018' AND '26-03-2018'
AND ITE.CODPROD = PRO.CODPROD
AND CAB.TIPMOV = 'P'
AND PRO.DESCRPROD NOT LIKE '%CX.%'
AND PRO.CODGRUPOPROD NOT IN(01050000,01050101)
AND CAB.CODPARC NOT IN(62,63,64,65,66,67,1043)
AND PRO.USOPROD <> 'M' ) *100,2)
END AS PORCENTAGEM,
(SELECT
  EXC.VLRVENDA
  FROM TGFEXC EXC
  WHERE EXC.NUTAB = 36 AND EXC.CODPROD = ITE.CODPROD
)AS CUSTO

FROM TGFCAB CAB INNER JOIN TGFITE ITE ON (CAB.NUNOTA = ITE.NUNOTA)
                LEFT OUTER JOIN TGFPRO PRO ON (ITE.CODPROD = PRO.CODPROD)
                INNER JOIN TGFEXC EXC ON (EXC.CODPROD = ITE.CODPROD)

WHERE PRO.CODPROD IN (SELECT DISTINCT PROD1.CODPROD FROM TGFPRO PROD1 WHERE PROD1.CODPROD = PRO.CODPROD) 
AND CAB.TIPMOV = 'P' AND CAB.DTNEG BETWEEN '01-03-2018' AND '26-03-2018'
AND CAB.CODTIPOPER IN (4,17,49,51,52,53,54,63,66,89,133,135,136,142,143,145,147,165)
AND CAB.CODPARC NOT IN(62,63,64,65,66,67,1043)
AND PRO.CODGRUPOPROD NOT IN(01050101,01050102,01050103)
AND PRO.USOPROD <> 'M'

GROUP BY ITE.CODPROD,PRO.DESCRPROD,ITE.CODVOL,ITE.PRECOBASE,ITE.VLRDESC,CAB.CODTIPOPER,EXC.VLRVENDA,CAB.NUNOTA,QTDNEG

) X
GROUP BY X.CODPROD,X.DESCRPROD,X.CODVOL,X.QTDNEG,X.TOTAL_VENDA,X.PRECOBASE,X.VALOR_DESCONTO,X.CUSTO,X.VLRTOT_ITEM

ORDER BY X.CODPROD DESC;
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Ele está somando as linhas repetidas ? É isso?
A tabela que ta trazendo linhas repetidas é a TGFITE ?

Se possível, manda pra gente uma amostra do resultado que você está tendo.
As vezes é um erro de JOIN, as vezes é realmente linhas duplicadas que precisam ser SOMADAS antes de fazer outros joins, etc...
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Opa, certamente tem colunas com valores diferentes que acaba duplicando o resultado mesmo com esses GROUP BY e DISTINCT.

Por sinal, o DISTINCT aí se faz desnecessário, aparentemente o GROUP BY já teria esse trabalho de fazer a distinção.

No entanto, é estranho também, no SELECT ter os ROUND e no GROUP BY estar sem.
Responder
  • Informação